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