Revision 03d1dba2
b/daemons/ganeti-noded | ||
---|---|---|
501 | 501 |
"""Write ssconf files. |
502 | 502 |
|
503 | 503 |
""" |
504 |
return backend.WriteSsconfFiles() |
|
504 |
(values,) = params |
|
505 |
return backend.WriteSsconfFiles(values) |
|
505 | 506 |
|
506 | 507 |
# os ----------------------- |
507 | 508 |
|
b/lib/backend.py | ||
---|---|---|
1226 | 1226 |
return True |
1227 | 1227 |
|
1228 | 1228 |
|
1229 |
def WriteSsconfFiles(): |
|
1230 |
ssconf.WriteSsconfFiles(constants.CLUSTER_CONF_FILE)
|
|
1229 |
def WriteSsconfFiles(values):
|
|
1230 |
ssconf.WriteSsconfFiles(values)
|
|
1231 | 1231 |
|
1232 | 1232 |
|
1233 | 1233 |
def _ErrnoOrStr(err): |
b/lib/config.py | ||
---|---|---|
865 | 865 |
# Write ssconf files on all nodes (including locally) |
866 | 866 |
if self._last_cluster_serial < self._config_data.cluster.serial_no: |
867 | 867 |
if not self._offline: |
868 |
rpc.RpcRunner.call_write_ssconf_files(self._UnlockedGetNodeList()) |
|
868 |
rpc.RpcRunner.call_write_ssconf_files(self._UnlockedGetNodeList(), |
|
869 |
self._UnlockedGetSsconfValues()) |
|
869 | 870 |
self._last_cluster_serial = self._config_data.cluster.serial_no |
870 | 871 |
|
872 |
def _UnlockedGetSsconfValues(self): |
|
873 |
return { |
|
874 |
"cluster_name": self._config_data.cluster.cluster_name, |
|
875 |
"master_ip": self._config_data.cluster.master_ip, |
|
876 |
"master_netdev": self._config_data.cluster.master_netdev, |
|
877 |
"master_node": self._config_data.cluster.master_node, |
|
878 |
} |
|
879 |
|
|
871 | 880 |
@locking.ssynchronized(_config_lock) |
872 | 881 |
def InitConfig(self, version, cluster_config, master_node_config): |
873 | 882 |
"""Create the initial cluster configuration. |
b/lib/rpc.py | ||
---|---|---|
622 | 622 |
address_list=address_list) |
623 | 623 |
|
624 | 624 |
@classmethod |
625 |
def call_write_ssconf_files(cls, node_list): |
|
625 |
def call_write_ssconf_files(cls, node_list, values):
|
|
626 | 626 |
"""Write ssconf files. |
627 | 627 |
|
628 | 628 |
This is a multi-node call. |
629 | 629 |
|
630 | 630 |
""" |
631 |
return cls._StaticMultiNodeCall(node_list, "write_ssconf_files", []) |
|
631 |
return cls._StaticMultiNodeCall(node_list, "write_ssconf_files", [values])
|
|
632 | 632 |
|
633 | 633 |
def call_os_diagnose(self, node_list): |
634 | 634 |
"""Request a diagnose of OS definitions. |
b/lib/ssconf.py | ||
---|---|---|
27 | 27 |
""" |
28 | 28 |
|
29 | 29 |
import sys |
30 |
import re |
|
30 | 31 |
|
31 | 32 |
from ganeti import errors |
32 | 33 |
from ganeti import constants |
... | ... | |
36 | 37 |
|
37 | 38 |
SSCONF_LOCK_TIMEOUT = 10 |
38 | 39 |
|
40 |
RE_VALID_SSCONF_NAME = re.compile(r'^[-_a-z0-9]+$') |
|
41 |
|
|
39 | 42 |
|
40 | 43 |
class SimpleConfigReader(object): |
41 | 44 |
"""Simple class to read configuration file. |
... | ... | |
110 | 113 |
|
111 | 114 |
|
112 | 115 |
def _SsconfPath(name): |
116 |
if not RE_VALID_SSCONF_NAME.match(name): |
|
117 |
raise errors.ParameterError("Invalid ssconf name: %s" % name) |
|
113 | 118 |
return "%s/ssconf_%s" % (constants.DATA_DIR, name) |
114 | 119 |
|
115 | 120 |
|
116 |
def WriteSsconfFiles(file_name):
|
|
121 |
def WriteSsconfFiles(values):
|
|
117 | 122 |
"""Writes legacy ssconf files to be used by external scripts. |
118 | 123 |
|
119 |
@type file_name: string
|
|
120 |
@param file_name: Path to configuration file
|
|
124 |
@type values: dict
|
|
125 |
@param values: Dictionary of (name, value)
|
|
121 | 126 |
|
122 | 127 |
""" |
123 | 128 |
ssconf_lock = utils.FileLock(constants.SSCONF_LOCK_FILE) |
124 | 129 |
|
125 |
# Read config |
|
126 |
cfg = SimpleConfigReader(file_name=file_name) |
|
127 |
|
|
128 | 130 |
# Get lock while writing files |
129 | 131 |
ssconf_lock.Exclusive(blocking=True, timeout=SSCONF_LOCK_TIMEOUT) |
130 | 132 |
try: |
131 |
utils.WriteFile(_SsconfPath("cluster_name"), |
|
132 |
data="%s\n" % cfg.GetClusterName()) |
|
133 |
|
|
134 |
utils.WriteFile(_SsconfPath("master_ip"), |
|
135 |
data="%s\n" % cfg.GetMasterIP()) |
|
136 |
|
|
137 |
utils.WriteFile(_SsconfPath("master_netdev"), |
|
138 |
data="%s\n" % cfg.GetMasterNetdev()) |
|
139 |
|
|
140 |
utils.WriteFile(_SsconfPath("master_node"), |
|
141 |
data="%s\n" % cfg.GetMasterNode()) |
|
133 |
for name, value in values.iteritems(): |
|
134 |
if not value.endswith("\n"): |
|
135 |
value += "\n" |
|
136 |
utils.WriteFile(_SsconfPath(name), |
|
137 |
data=value) |
|
142 | 138 |
finally: |
143 | 139 |
ssconf_lock.Unlock() |
144 | 140 |
|
Also available in: Unified diff