Add default file storage path to path utils
[ganeti-local] / lib / pathutils.py
1 #
2 #
3
4 # Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Google Inc.
5 #
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
10 #
11 # This program is distributed in the hope that it will be useful, but
12 # WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 # General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 # 02110-1301, USA.
20
21
22 """Module containing constants and functions for filesystem paths.
23
24 """
25
26 from ganeti import _autoconf
27 from ganeti import compat
28 from ganeti import vcluster
29
30
31 # FIXME: remove autoconf override
32 DEFAULT_FILE_STORAGE_DIR = "/srv/ganeti/file-storage"
33
34 # Build-time constants
35 if _autoconf.ENABLE_FILE_STORAGE:
36   DEFAULT_FILE_STORAGE_DIR = vcluster.AddNodePrefix(_autoconf.FILE_STORAGE_DIR)
37 else:
38   DEFAULT_FILE_STORAGE_DIR = _autoconf.FILE_STORAGE_DIR
39 if _autoconf.ENABLE_SHARED_FILE_STORAGE:
40   DEFAULT_SHARED_FILE_STORAGE_DIR = \
41     vcluster.AddNodePrefix(_autoconf.SHARED_FILE_STORAGE_DIR)
42 else:
43   DEFAULT_SHARED_FILE_STORAGE_DIR = _autoconf.SHARED_FILE_STORAGE_DIR
44 EXPORT_DIR = vcluster.AddNodePrefix(_autoconf.EXPORT_DIR)
45 OS_SEARCH_PATH = _autoconf.OS_SEARCH_PATH
46 ES_SEARCH_PATH = _autoconf.ES_SEARCH_PATH
47 SSH_CONFIG_DIR = _autoconf.SSH_CONFIG_DIR
48 XEN_CONFIG_DIR = vcluster.AddNodePrefix(_autoconf.XEN_CONFIG_DIR)
49 SYSCONFDIR = vcluster.AddNodePrefix(_autoconf.SYSCONFDIR)
50 TOOLSDIR = _autoconf.TOOLSDIR
51 LOCALSTATEDIR = vcluster.AddNodePrefix(_autoconf.LOCALSTATEDIR)
52
53 # Paths which don't change for a virtual cluster
54 DAEMON_UTIL = _autoconf.PKGLIBDIR + "/daemon-util"
55 IMPORT_EXPORT_DAEMON = _autoconf.PKGLIBDIR + "/import-export"
56 KVM_CONSOLE_WRAPPER = _autoconf.PKGLIBDIR + "/tools/kvm-console-wrapper"
57 KVM_IFUP = _autoconf.PKGLIBDIR + "/kvm-ifup"
58 PREPARE_NODE_JOIN = _autoconf.PKGLIBDIR + "/prepare-node-join"
59 NODE_DAEMON_SETUP = _autoconf.PKGLIBDIR + "/node-daemon-setup"
60 XEN_CONSOLE_WRAPPER = _autoconf.PKGLIBDIR + "/tools/xen-console-wrapper"
61 ETC_HOSTS = vcluster.ETC_HOSTS
62
63 # Top-level paths
64 DATA_DIR = LOCALSTATEDIR + "/lib/ganeti"
65 LOCK_DIR = LOCALSTATEDIR + "/lock"
66 LOG_DIR = LOCALSTATEDIR + "/log/ganeti"
67 RUN_DIR = LOCALSTATEDIR + "/run/ganeti"
68
69 #: Script to configure master IP address
70 DEFAULT_MASTER_SETUP_SCRIPT = TOOLSDIR + "/master-ip-setup"
71
72 SSH_HOST_DSA_PRIV = SSH_CONFIG_DIR + "/ssh_host_dsa_key"
73 SSH_HOST_DSA_PUB = SSH_HOST_DSA_PRIV + ".pub"
74 SSH_HOST_RSA_PRIV = SSH_CONFIG_DIR + "/ssh_host_rsa_key"
75 SSH_HOST_RSA_PUB = SSH_HOST_RSA_PRIV + ".pub"
76
77 BDEV_CACHE_DIR = RUN_DIR + "/bdev-cache"
78 DISK_LINKS_DIR = RUN_DIR + "/instance-disks"
79 SOCKET_DIR = RUN_DIR + "/socket"
80 CRYPTO_KEYS_DIR = RUN_DIR + "/crypto"
81 IMPORT_EXPORT_DIR = RUN_DIR + "/import-export"
82 INSTANCE_STATUS_FILE = RUN_DIR + "/instance-status"
83 INSTANCE_REASON_DIR = RUN_DIR + "/instance-reason"
84 #: User-id pool lock directory (used user IDs have a corresponding lock file in
85 #: this directory)
86 UIDPOOL_LOCKDIR = RUN_DIR + "/uid-pool"
87
88 SSCONF_LOCK_FILE = LOCK_DIR + "/ganeti-ssconf.lock"
89
90 CLUSTER_CONF_FILE = DATA_DIR + "/config.data"
91 RAPI_CERT_FILE = DATA_DIR + "/rapi.pem"
92 CONFD_HMAC_KEY = DATA_DIR + "/hmac.key"
93 SPICE_CERT_FILE = DATA_DIR + "/spice.pem"
94 SPICE_CACERT_FILE = DATA_DIR + "/spice-ca.pem"
95 CLUSTER_DOMAIN_SECRET_FILE = DATA_DIR + "/cluster-domain-secret"
96 SSH_KNOWN_HOSTS_FILE = DATA_DIR + "/known_hosts"
97 RAPI_USERS_FILE = DATA_DIR + "/rapi/users"
98 QUEUE_DIR = DATA_DIR + "/queue"
99 CONF_DIR = SYSCONFDIR + "/ganeti"
100 USER_SCRIPTS_DIR = CONF_DIR + "/scripts"
101 VNC_PASSWORD_FILE = CONF_DIR + "/vnc-cluster-password"
102 HOOKS_BASE_DIR = CONF_DIR + "/hooks"
103 FILE_STORAGE_PATHS_FILE = CONF_DIR + "/file-storage-paths"
104 RESTRICTED_COMMANDS_DIR = CONF_DIR + "/restricted-commands"
105
106 #: Node daemon certificate path
107 NODED_CERT_FILE = DATA_DIR + "/server.pem"
108
109 #: Node daemon certificate file permissions
110 NODED_CERT_MODE = 0440
111
112 #: Locked in exclusive mode while noded verifies a remote command
113 RESTRICTED_COMMANDS_LOCK_FILE = LOCK_DIR + "/ganeti-restricted-commands.lock"
114
115 #: Lock file for watcher, locked in shared mode by watcher; lock in exclusive
116 # mode to block watcher (see L{cli._RunWhileClusterStoppedHelper.Call}
117 WATCHER_LOCK_FILE = LOCK_DIR + "/ganeti-watcher.lock"
118
119 #: Status file for per-group watcher, locked in exclusive mode by watcher
120 WATCHER_GROUP_STATE_FILE = DATA_DIR + "/watcher.%s.data"
121
122 #: File for per-group instance status, merged into L{INSTANCE_STATUS_FILE} by
123 #: per-group processes
124 WATCHER_GROUP_INSTANCE_STATUS_FILE = DATA_DIR + "/watcher.%s.instance-status"
125
126 #: File containing Unix timestamp until which watcher should be paused
127 WATCHER_PAUSEFILE = DATA_DIR + "/watcher.pause"
128
129 #: User-provided master IP setup script
130 EXTERNAL_MASTER_SETUP_SCRIPT = USER_SCRIPTS_DIR + "/master-ip-setup"
131
132 #: LUXI socket used for job execution
133 MASTER_SOCKET = SOCKET_DIR + "/ganeti-master"
134 #: LUXI socket used for queries only
135 QUERY_SOCKET = SOCKET_DIR + "/ganeti-query"
136
137 LOG_OS_DIR = LOG_DIR + "/os"
138 LOG_ES_DIR = LOG_DIR + "/extstorage"
139 #: Directory for storing Xen config files after failed instance starts
140 LOG_XEN_DIR = LOG_DIR + "/xen"
141
142 # Job queue paths
143 JOB_QUEUE_LOCK_FILE = QUEUE_DIR + "/lock"
144 JOB_QUEUE_VERSION_FILE = QUEUE_DIR + "/version"
145 JOB_QUEUE_SERIAL_FILE = QUEUE_DIR + "/serial"
146 JOB_QUEUE_ARCHIVE_DIR = QUEUE_DIR + "/archive"
147 JOB_QUEUE_DRAIN_FILE = QUEUE_DIR + "/drain"
148
149 ALL_CERT_FILES = compat.UniqueFrozenset([
150   NODED_CERT_FILE,
151   RAPI_CERT_FILE,
152   SPICE_CERT_FILE,
153   SPICE_CACERT_FILE,
154   ])
155
156
157 def GetLogFilename(daemon_name):
158   """Returns the full path for a daemon's log file.
159
160   """
161   return "%s/%s.log" % (LOG_DIR, daemon_name)
162
163
164 LOG_WATCHER = GetLogFilename("watcher")
165 LOG_COMMANDS = GetLogFilename("commands")
166 LOG_BURNIN = GetLogFilename("burnin")