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