Merge branch 'stable-2.16' into stable-2.17
[ganeti-github.git] / lib / pathutils.py
1 #
2 #
3
4 # Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Google Inc.
5 # All rights reserved.
6 #
7 # Redistribution and use in source and binary forms, with or without
8 # modification, are permitted provided that the following conditions are
9 # met:
10 #
11 # 1. Redistributions of source code must retain the above copyright notice,
12 # this list of conditions and the following disclaimer.
13 #
14 # 2. Redistributions in binary form must reproduce the above copyright
15 # notice, this list of conditions and the following disclaimer in the
16 # documentation and/or other materials provided with the distribution.
17 #
18 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
19 # IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20 # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21 # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
22 # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
30
31 """Module containing constants and functions for filesystem paths.
32
33 """
34
35 from ganeti import _constants
36 from ganeti import compat
37 from ganeti import vcluster
38
39
40 # Build-time constants
41 DEFAULT_FILE_STORAGE_DIR = "/srv/ganeti/file-storage"
42 DEFAULT_FILE_STORAGE_DIR = vcluster.AddNodePrefix(DEFAULT_FILE_STORAGE_DIR)
43 DEFAULT_SHARED_FILE_STORAGE_DIR = "/srv/ganeti/shared-file-storage"
44 DEFAULT_SHARED_FILE_STORAGE_DIR = \
45 vcluster.AddNodePrefix(DEFAULT_SHARED_FILE_STORAGE_DIR)
46 DEFAULT_GLUSTER_STORAGE_DIR = "/var/run/ganeti/gluster"
47 DEFAULT_GLUSTER_STORAGE_DIR = \
48 vcluster.AddNodePrefix(DEFAULT_GLUSTER_STORAGE_DIR)
49 EXPORT_DIR = vcluster.AddNodePrefix(_constants.EXPORT_DIR)
50 BACKUP_DIR = vcluster.AddNodePrefix(_constants.BACKUP_DIR)
51 OS_SEARCH_PATH = _constants.OS_SEARCH_PATH
52 ES_SEARCH_PATH = _constants.ES_SEARCH_PATH
53 SSH_CONFIG_DIR = _constants.SSH_CONFIG_DIR
54 XEN_CONFIG_DIR = vcluster.AddNodePrefix(_constants.XEN_CONFIG_DIR)
55 SYSCONFDIR = vcluster.AddNodePrefix(_constants.SYSCONFDIR)
56 TOOLSDIR = _constants.TOOLSDIR
57 PKGLIBDIR = _constants.PKGLIBDIR
58 SHAREDIR = _constants.SHAREDIR
59 LOCALSTATEDIR = vcluster.AddNodePrefix(_constants.LOCALSTATEDIR)
60
61 # Paths which don't change for a virtual cluster
62 DAEMON_UTIL = _constants.PKGLIBDIR + "/daemon-util"
63 IMPORT_EXPORT_DAEMON = _constants.PKGLIBDIR + "/import-export"
64 KVM_CONSOLE_WRAPPER = _constants.PKGLIBDIR + "/tools/kvm-console-wrapper"
65 KVM_IFUP = _constants.PKGLIBDIR + "/kvm-ifup"
66 PREPARE_NODE_JOIN = _constants.PKGLIBDIR + "/prepare-node-join"
67 SSH_UPDATE = _constants.PKGLIBDIR + "/ssh-update"
68 NODE_DAEMON_SETUP = _constants.PKGLIBDIR + "/node-daemon-setup"
69 SSL_UPDATE = _constants.PKGLIBDIR + "/ssl-update"
70 XEN_CONSOLE_WRAPPER = _constants.PKGLIBDIR + "/tools/xen-console-wrapper"
71 CFGUPGRADE = _constants.PKGLIBDIR + "/tools/cfgupgrade"
72 POST_UPGRADE = _constants.PKGLIBDIR + "/tools/post-upgrade"
73 ENSURE_DIRS = _constants.PKGLIBDIR + "/ensure-dirs"
74 # Script to configure the metadata virtual network interface with Xen
75 XEN_VIF_METAD_SETUP = _constants.PKGLIBDIR + "/vif-ganeti-metad"
76 ETC_HOSTS = vcluster.ETC_HOSTS
77
78 # Top-level paths
79 DATA_DIR = LOCALSTATEDIR + "/lib/ganeti"
80 LOCK_DIR = LOCALSTATEDIR + "/lock"
81 LOG_DIR = LOCALSTATEDIR + "/log/ganeti"
82 RUN_DIR = LOCALSTATEDIR + "/run/ganeti"
83
84 #: Script to configure master IP address
85 DEFAULT_MASTER_SETUP_SCRIPT = TOOLSDIR + "/master-ip-setup"
86
87 SSH_HOST_DSA_PRIV = _constants.SSH_HOST_DSA_PRIV
88 SSH_HOST_DSA_PUB = _constants.SSH_HOST_DSA_PUB
89 SSH_HOST_RSA_PRIV = _constants.SSH_HOST_RSA_PRIV
90 SSH_HOST_RSA_PUB = _constants.SSH_HOST_RSA_PUB
91 SSH_PUB_KEYS = DATA_DIR + "/ganeti_pub_keys"
92
93 BDEV_CACHE_DIR = RUN_DIR + "/bdev-cache"
94 DISK_LINKS_DIR = RUN_DIR + "/instance-disks"
95 SOCKET_DIR = RUN_DIR + "/socket"
96 CRYPTO_KEYS_DIR = RUN_DIR + "/crypto"
97 IMPORT_EXPORT_DIR = RUN_DIR + "/import-export"
98 INSTANCE_STATUS_FILE = RUN_DIR + "/instance-status"
99 INSTANCE_REASON_DIR = RUN_DIR + "/instance-reason"
100 #: User-id pool lock directory (used user IDs have a corresponding lock file in
101 #: this directory)
102 UIDPOOL_LOCKDIR = RUN_DIR + "/uid-pool"
103 LIVELOCK_DIR = RUN_DIR + "/livelocks"
104 LUXID_MESSAGE_DIR = RUN_DIR + "/luxidmessages"
105
106 SSCONF_LOCK_FILE = LOCK_DIR + "/ganeti-ssconf.lock"
107
108 CLUSTER_CONF_FILE = DATA_DIR + "/config.data"
109 RAPI_CERT_FILE = DATA_DIR + "/rapi.pem"
110 CONFD_HMAC_KEY = DATA_DIR + "/hmac.key"
111 SPICE_CERT_FILE = DATA_DIR + "/spice.pem"
112 SPICE_CACERT_FILE = DATA_DIR + "/spice-ca.pem"
113 CLUSTER_DOMAIN_SECRET_FILE = DATA_DIR + "/cluster-domain-secret"
114 SSH_KNOWN_HOSTS_FILE = DATA_DIR + "/known_hosts"
115 RAPI_DATA_DIR = DATA_DIR + "/rapi"
116 RAPI_USERS_FILE = RAPI_DATA_DIR + "/users"
117 QUEUE_DIR = DATA_DIR + "/queue"
118 INTENT_TO_UPGRADE = DATA_DIR + "/intent-to-upgrade"
119 CONF_DIR = SYSCONFDIR + "/ganeti"
120 XEN_IFUP_OS = CONF_DIR + "/xen-ifup-os"
121 USER_SCRIPTS_DIR = CONF_DIR + "/scripts"
122 VNC_PASSWORD_FILE = CONF_DIR + "/vnc-cluster-password"
123 HOOKS_BASE_DIR = CONF_DIR + "/hooks"
124 FILE_STORAGE_PATHS_FILE = CONF_DIR + "/file-storage-paths"
125 RESTRICTED_COMMANDS_DIR = CONF_DIR + "/restricted-commands"
126 REPAIR_COMMANDS_DIR = CONF_DIR + "/node-repair-commands"
127
128 #: Node daemon certificate path
129 NODED_CERT_FILE = DATA_DIR + "/server.pem"
130 NODED_CLIENT_CERT_FILE = DATA_DIR + "/client.pem"
131
132 #: Node daemon certificate file permissions
133 NODED_CERT_MODE = 0440
134
135 #: Locked in exclusive mode while noded verifies a remote command
136 RESTRICTED_COMMANDS_LOCK_FILE = LOCK_DIR + "/ganeti-restricted-commands.lock"
137
138 #: Locked in exclusive mode while noded verifies a remote command
139 REPAIR_COMMANDS_LOCK_FILE = LOCK_DIR + "/ganeti-repair-commands.lock"
140
141 #: Lock file for watcher, locked in shared mode by watcher; lock in exclusive
142 # mode to block watcher (see L{cli._RunWhileDaemonsStoppedHelper.Call}
143 WATCHER_LOCK_FILE = LOCK_DIR + "/ganeti-watcher.lock"
144
145 #: Status file for per-group watcher, locked in exclusive mode by watcher
146 WATCHER_GROUP_STATE_FILE = DATA_DIR + "/watcher.%s.data"
147
148 #: File for per-group instance status, merged into L{INSTANCE_STATUS_FILE} by
149 #: per-group processes
150 WATCHER_GROUP_INSTANCE_STATUS_FILE = DATA_DIR + "/watcher.%s.instance-status"
151
152 #: File containing Unix timestamp until which watcher should be paused
153 WATCHER_PAUSEFILE = DATA_DIR + "/watcher.pause"
154
155 #: User-provided master IP setup script
156 EXTERNAL_MASTER_SETUP_SCRIPT = USER_SCRIPTS_DIR + "/master-ip-setup"
157
158 #: LUXI socket used for job execution
159 MASTER_SOCKET = SOCKET_DIR + "/ganeti-master"
160 #: LUXI socket used for queries only
161 QUERY_SOCKET = SOCKET_DIR + "/ganeti-query"
162 #: WConfD socket
163 WCONFD_SOCKET = SOCKET_DIR + "/ganeti-wconfd"
164 #: Metad socket
165 METAD_SOCKET = SOCKET_DIR + "/ganeti-metad"
166
167 LOG_OS_DIR = LOG_DIR + "/os"
168 LOG_ES_DIR = LOG_DIR + "/extstorage"
169 #: Directory for storing Xen config files after failed instance starts
170 LOG_XEN_DIR = LOG_DIR + "/xen"
171
172 # Job queue paths
173 JOB_QUEUE_LOCK_FILE = QUEUE_DIR + "/lock"
174 JOB_QUEUE_VERSION_FILE = QUEUE_DIR + "/version"
175 JOB_QUEUE_SERIAL_FILE = QUEUE_DIR + "/serial"
176 JOB_QUEUE_ARCHIVE_DIR = QUEUE_DIR + "/archive"
177 JOB_QUEUE_DRAIN_FILE = QUEUE_DIR + "/drain"
178
179 ALL_CERT_FILES = compat.UniqueFrozenset([
180 NODED_CERT_FILE,
181 RAPI_CERT_FILE,
182 SPICE_CERT_FILE,
183 SPICE_CACERT_FILE,
184 ])
185
186
187 def GetLogFilename(daemon_name):
188 """Returns the full path for a daemon's log file.
189
190 """
191 return "%s/%s.log" % (LOG_DIR, daemon_name)
192
193
194 LOG_WATCHER = GetLogFilename("watcher")
195 LOG_COMMANDS = GetLogFilename("commands")
196 LOG_BURNIN = GetLogFilename("burnin")