Revision cffbbae7

b/lib/backend.py
63 63
from ganeti import mcpu
64 64
from ganeti import compat
65 65
from ganeti import pathutils
66
from ganeti import vcluster
66 67

  
67 68

  
68 69
_BOOT_ID_PATH = "/proc/sys/kernel/random/boot_id"
......
2072 2073
  @rtype: None
2073 2074

  
2074 2075
  """
2076
  file_name = vcluster.LocalizeVirtualPath(file_name)
2077

  
2075 2078
  if not os.path.isabs(file_name):
2076 2079
    _Fail("Filename passed to UploadFile is not absolute: '%s'", file_name)
2077 2080

  
......
2821 2824
  @return: the success of the operation
2822 2825

  
2823 2826
  """
2827
  file_name = vcluster.LocalizeVirtualPath(file_name)
2828

  
2824 2829
  _EnsureJobQueueFile(file_name)
2825 2830
  getents = runtime.GetEnts()
2826 2831

  
......
2842 2847
  @return: the success of the operation and payload
2843 2848

  
2844 2849
  """
2850
  old = vcluster.LocalizeVirtualPath(old)
2851
  new = vcluster.LocalizeVirtualPath(new)
2852

  
2845 2853
  _EnsureJobQueueFile(old)
2846 2854
  _EnsureJobQueueFile(new)
2847 2855

  
b/lib/hypervisor/hv_xen.py
33 33
from ganeti import netutils
34 34
from ganeti import objects
35 35
from ganeti import pathutils
36
from ganeti import vcluster
36 37

  
37 38

  
38
XEND_CONFIG_FILE = "/etc/xen/xend-config.sxp"
39
XL_CONFIG_FILE = "/etc/xen/xl.conf"
40
VIF_BRIDGE_SCRIPT = "/etc/xen/scripts/vif-bridge"
39
XEND_CONFIG_FILE = vcluster.AddNodePrefix("/etc/xen/xend-config.sxp")
40
XL_CONFIG_FILE = vcluster.AddNodePrefix("/etc/xen/xl.conf")
41
VIF_BRIDGE_SCRIPT = vcluster.AddNodePrefix("/etc/xen/scripts/vif-bridge")
41 42
_DOM0_NAME = "Domain-0"
42 43

  
43 44

  
b/lib/jqueue.py
60 60
from ganeti import query
61 61
from ganeti import qlang
62 62
from ganeti import pathutils
63
from ganeti import vcluster
63 64

  
64 65

  
65 66
JOBQUEUE_THREADS = 25
......
85 86
  return utils.SplitTime(time.time())
86 87

  
87 88

  
89
def _CallJqUpdate(runner, names, file_name, content):
90
  """Updates job queue file after virtualizing filename.
91

  
92
  """
93
  virt_file_name = vcluster.MakeVirtualPath(file_name)
94
  return runner.call_jobqueue_update(names, virt_file_name, content)
95

  
96

  
88 97
class _SimpleJobQuery:
89 98
  """Wrapper for job queries.
90 99

  
......
1690 1699
      # Read file content
1691 1700
      content = utils.ReadFile(file_name)
1692 1701

  
1693
      result = self._GetRpc(addrs).call_jobqueue_update([node_name], file_name,
1694
                                                        content)
1702
      result = _CallJqUpdate(self._GetRpc(addrs), [node_name],
1703
                             file_name, content)
1695 1704
      msg = result[node_name].fail_msg
1696 1705
      if msg:
1697 1706
        logging.error("Failed to upload file %s to node %s: %s",
......
1775 1784

  
1776 1785
    if replicate:
1777 1786
      names, addrs = self._GetNodeIp()
1778
      result = self._GetRpc(addrs).call_jobqueue_update(names, file_name, data)
1787
      result = _CallJqUpdate(self._GetRpc(addrs), names, file_name, data)
1779 1788
      self._CheckRpcResult(result, self._nodes, "Updating %s" % file_name)
1780 1789

  
1781 1790
  def _RenameFilesUnlocked(self, rename):
b/lib/pathutils.py
24 24
"""
25 25

  
26 26
from ganeti import _autoconf
27
from ganeti import vcluster
28

  
27 29

  
28 30
# Build-time constants
29
DEFAULT_FILE_STORAGE_DIR = _autoconf.FILE_STORAGE_DIR
30
DEFAULT_SHARED_FILE_STORAGE_DIR = _autoconf.SHARED_FILE_STORAGE_DIR
31
EXPORT_DIR = _autoconf.EXPORT_DIR
31
DEFAULT_FILE_STORAGE_DIR = vcluster.AddNodePrefix(_autoconf.FILE_STORAGE_DIR)
32
DEFAULT_SHARED_FILE_STORAGE_DIR = \
33
  vcluster.AddNodePrefix(_autoconf.SHARED_FILE_STORAGE_DIR)
34
EXPORT_DIR = vcluster.AddNodePrefix(_autoconf.EXPORT_DIR)
32 35
OS_SEARCH_PATH = _autoconf.OS_SEARCH_PATH
33 36
SSH_CONFIG_DIR = _autoconf.SSH_CONFIG_DIR
34
SYSCONFDIR = _autoconf.SYSCONFDIR
37
SYSCONFDIR = vcluster.AddNodePrefix(_autoconf.SYSCONFDIR)
35 38
TOOLSDIR = _autoconf.TOOLSDIR
39
LOCALSTATEDIR = vcluster.AddNodePrefix(_autoconf.LOCALSTATEDIR)
36 40

  
37 41
# Paths which don't change for a virtual cluster
38 42
DAEMON_UTIL = _autoconf.PKGLIBDIR + "/daemon-util"
......
43 47
XM_CONSOLE_WRAPPER = _autoconf.PKGLIBDIR + "/tools/xm-console-wrapper"
44 48

  
45 49
# Top-level paths
46
DATA_DIR = _autoconf.LOCALSTATEDIR + "/lib/ganeti"
47
LOCK_DIR = _autoconf.LOCALSTATEDIR + "/lock"
48
LOG_DIR = _autoconf.LOCALSTATEDIR + "/log/ganeti"
49
RUN_DIR = _autoconf.LOCALSTATEDIR + "/run/ganeti"
50
DATA_DIR = LOCALSTATEDIR + "/lib/ganeti"
51
LOCK_DIR = LOCALSTATEDIR + "/lock"
52
LOG_DIR = LOCALSTATEDIR + "/log/ganeti"
53
RUN_DIR = LOCALSTATEDIR + "/run/ganeti"
50 54

  
51 55
#: Script to configure master IP address
52 56
DEFAULT_MASTER_SETUP_SCRIPT = TOOLSDIR + "/master-ip-setup"
b/lib/rpc.py
48 48
from ganeti import compat
49 49
from ganeti import rpc_defs
50 50
from ganeti import pathutils
51
from ganeti import vcluster
51 52

  
52 53
# Special module generated at build time
53 54
from ganeti import _generated_rpc
......
524 525

  
525 526
  getents = getents_fn()
526 527

  
527
  return [filename, data, st.st_mode, getents.LookupUid(st.st_uid),
528
  virt_filename = vcluster.MakeVirtualPath(filename)
529

  
530
  return [virt_filename, data, st.st_mode, getents.LookupUid(st.st_uid),
528 531
          getents.LookupGid(st.st_gid), st.st_atime, st.st_mtime]
529 532

  
530 533

  
b/lib/ssh.py
33 33
from ganeti import constants
34 34
from ganeti import netutils
35 35
from ganeti import pathutils
36
from ganeti import vcluster
36 37

  
37 38

  
38 39
def FormatParamikoFingerprint(fingerprint):
......
184 185
                                      quiet=quiet))
185 186
    if tty:
186 187
      argv.extend(["-t", "-t"])
187
    argv.extend(["%s@%s" % (user, hostname), command])
188

  
189
    argv.append("%s@%s" % (user, hostname))
190

  
191
    # Insert variables for virtual nodes
192
    argv.extend("export %s=%s;" %
193
                (utils.ShellQuote(name), utils.ShellQuote(value))
194
                for (name, value) in
195
                  vcluster.EnvironmentForHost(hostname).items())
196

  
197
    argv.append(command)
198

  
188 199
    return argv
189 200

  
190 201
  def Run(self, *args, **kwargs):
......
225 236
    if netutils.IP6Address.IsValid(node):
226 237
      node = netutils.FormatAddress((node, None))
227 238

  
228
    command.append("%s:%s" % (node, filename))
239
    command.append("%s:%s" % (node, vcluster.ExchangeNodeRoot(node, filename)))
229 240

  
230 241
    result = utils.RunCmd(command)
231 242

  
......
255 266
        - detail: string with details
256 267

  
257 268
    """
258
    retval = self.Run(node, "root", "hostname --fqdn", quiet=False)
269
    cmd = ("if test -z \"$GANETI_HOSTNAME\"; then"
270
           "  hostname --fqdn;"
271
           "else"
272
           "  echo \"$GANETI_HOSTNAME\";"
273
           "fi")
274
    retval = self.Run(node, "root", cmd, quiet=False)
259 275

  
260 276
    if retval.failed:
261 277
      msg = "ssh problem"

Also available in: Unified diff