Package ganeti :: Module pathutils
[hide private]
[frames] | no frames]

Source Code for Module ganeti.pathutils

  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  EXPORT_DIR = vcluster.AddNodePrefix(_constants.EXPORT_DIR) 
 47  BACKUP_DIR = vcluster.AddNodePrefix(_constants.BACKUP_DIR) 
 48  OS_SEARCH_PATH = _constants.OS_SEARCH_PATH 
 49  ES_SEARCH_PATH = _constants.ES_SEARCH_PATH 
 50  SSH_CONFIG_DIR = _constants.SSH_CONFIG_DIR 
 51  XEN_CONFIG_DIR = vcluster.AddNodePrefix(_constants.XEN_CONFIG_DIR) 
 52  SYSCONFDIR = vcluster.AddNodePrefix(_constants.SYSCONFDIR) 
 53  TOOLSDIR = _constants.TOOLSDIR 
 54  PKGLIBDIR = _constants.PKGLIBDIR 
 55  SHAREDIR = _constants.SHAREDIR 
 56  LOCALSTATEDIR = vcluster.AddNodePrefix(_constants.LOCALSTATEDIR) 
 57   
 58  # Paths which don't change for a virtual cluster 
 59  DAEMON_UTIL = _constants.PKGLIBDIR + "/daemon-util" 
 60  IMPORT_EXPORT_DAEMON = _constants.PKGLIBDIR + "/import-export" 
 61  KVM_CONSOLE_WRAPPER = _constants.PKGLIBDIR + "/tools/kvm-console-wrapper" 
 62  KVM_IFUP = _constants.PKGLIBDIR + "/kvm-ifup" 
 63  PREPARE_NODE_JOIN = _constants.PKGLIBDIR + "/prepare-node-join" 
 64  NODE_DAEMON_SETUP = _constants.PKGLIBDIR + "/node-daemon-setup" 
 65  XEN_CONSOLE_WRAPPER = _constants.PKGLIBDIR + "/tools/xen-console-wrapper" 
 66  CFGUPGRADE = _constants.PKGLIBDIR + "/tools/cfgupgrade" 
 67  POST_UPGRADE = _constants.PKGLIBDIR + "/tools/post-upgrade" 
 68  ENSURE_DIRS = _constants.PKGLIBDIR + "/ensure-dirs" 
 69  ETC_HOSTS = vcluster.ETC_HOSTS 
 70   
 71  # Top-level paths 
 72  DATA_DIR = LOCALSTATEDIR + "/lib/ganeti" 
 73  LOCK_DIR = LOCALSTATEDIR + "/lock" 
 74  LOG_DIR = LOCALSTATEDIR + "/log/ganeti" 
 75  RUN_DIR = LOCALSTATEDIR + "/run/ganeti" 
 76   
 77  #: Script to configure master IP address 
 78  DEFAULT_MASTER_SETUP_SCRIPT = TOOLSDIR + "/master-ip-setup" 
 79   
 80  SSH_HOST_DSA_PRIV = _constants.SSH_HOST_DSA_PRIV 
 81  SSH_HOST_DSA_PUB = _constants.SSH_HOST_DSA_PUB 
 82  SSH_HOST_RSA_PRIV = _constants.SSH_HOST_RSA_PRIV 
 83  SSH_HOST_RSA_PUB = _constants.SSH_HOST_RSA_PUB 
 84   
 85  BDEV_CACHE_DIR = RUN_DIR + "/bdev-cache" 
 86  DISK_LINKS_DIR = RUN_DIR + "/instance-disks" 
 87  SOCKET_DIR = RUN_DIR + "/socket" 
 88  CRYPTO_KEYS_DIR = RUN_DIR + "/crypto" 
 89  IMPORT_EXPORT_DIR = RUN_DIR + "/import-export" 
 90  INSTANCE_STATUS_FILE = RUN_DIR + "/instance-status" 
 91  INSTANCE_REASON_DIR = RUN_DIR + "/instance-reason" 
 92  #: User-id pool lock directory (used user IDs have a corresponding lock file in 
 93  #: this directory) 
 94  UIDPOOL_LOCKDIR = RUN_DIR + "/uid-pool" 
 95   
 96  SSCONF_LOCK_FILE = LOCK_DIR + "/ganeti-ssconf.lock" 
 97   
 98  CLUSTER_CONF_FILE = DATA_DIR + "/config.data" 
 99  RAPI_CERT_FILE = DATA_DIR + "/rapi.pem" 
100  CONFD_HMAC_KEY = DATA_DIR + "/hmac.key" 
101  SPICE_CERT_FILE = DATA_DIR + "/spice.pem" 
102  SPICE_CACERT_FILE = DATA_DIR + "/spice-ca.pem" 
103  CLUSTER_DOMAIN_SECRET_FILE = DATA_DIR + "/cluster-domain-secret" 
104  SSH_KNOWN_HOSTS_FILE = DATA_DIR + "/known_hosts" 
105  RAPI_USERS_FILE = DATA_DIR + "/rapi/users" 
106  QUEUE_DIR = DATA_DIR + "/queue" 
107  INTENT_TO_UPGRADE = DATA_DIR + "/intent-to-upgrade" 
108  CONF_DIR = SYSCONFDIR + "/ganeti" 
109  USER_SCRIPTS_DIR = CONF_DIR + "/scripts" 
110  VNC_PASSWORD_FILE = CONF_DIR + "/vnc-cluster-password" 
111  HOOKS_BASE_DIR = CONF_DIR + "/hooks" 
112  FILE_STORAGE_PATHS_FILE = CONF_DIR + "/file-storage-paths" 
113  RESTRICTED_COMMANDS_DIR = CONF_DIR + "/restricted-commands" 
114   
115  #: Node daemon certificate path 
116  NODED_CERT_FILE = DATA_DIR + "/server.pem" 
117   
118  #: Node daemon certificate file permissions 
119  NODED_CERT_MODE = 0440 
120   
121  #: Locked in exclusive mode while noded verifies a remote command 
122  RESTRICTED_COMMANDS_LOCK_FILE = LOCK_DIR + "/ganeti-restricted-commands.lock" 
123   
124  #: Lock file for watcher, locked in shared mode by watcher; lock in exclusive 
125  # mode to block watcher (see L{cli._RunWhileClusterStoppedHelper.Call} 
126  WATCHER_LOCK_FILE = LOCK_DIR + "/ganeti-watcher.lock" 
127   
128  #: Status file for per-group watcher, locked in exclusive mode by watcher 
129  WATCHER_GROUP_STATE_FILE = DATA_DIR + "/watcher.%s.data" 
130   
131  #: File for per-group instance status, merged into L{INSTANCE_STATUS_FILE} by 
132  #: per-group processes 
133  WATCHER_GROUP_INSTANCE_STATUS_FILE = DATA_DIR + "/watcher.%s.instance-status" 
134   
135  #: File containing Unix timestamp until which watcher should be paused 
136  WATCHER_PAUSEFILE = DATA_DIR + "/watcher.pause" 
137   
138  #: User-provided master IP setup script 
139  EXTERNAL_MASTER_SETUP_SCRIPT = USER_SCRIPTS_DIR + "/master-ip-setup" 
140   
141  #: LUXI socket used for job execution 
142  MASTER_SOCKET = SOCKET_DIR + "/ganeti-master" 
143  #: LUXI socket used for queries only 
144  QUERY_SOCKET = SOCKET_DIR + "/ganeti-query" 
145   
146  LOG_OS_DIR = LOG_DIR + "/os" 
147  LOG_ES_DIR = LOG_DIR + "/extstorage" 
148  #: Directory for storing Xen config files after failed instance starts 
149  LOG_XEN_DIR = LOG_DIR + "/xen" 
150   
151  # Job queue paths 
152  JOB_QUEUE_LOCK_FILE = QUEUE_DIR + "/lock" 
153  JOB_QUEUE_VERSION_FILE = QUEUE_DIR + "/version" 
154  JOB_QUEUE_SERIAL_FILE = QUEUE_DIR + "/serial" 
155  JOB_QUEUE_ARCHIVE_DIR = QUEUE_DIR + "/archive" 
156  JOB_QUEUE_DRAIN_FILE = QUEUE_DIR + "/drain" 
157   
158  ALL_CERT_FILES = compat.UniqueFrozenset([ 
159    NODED_CERT_FILE, 
160    RAPI_CERT_FILE, 
161    SPICE_CERT_FILE, 
162    SPICE_CACERT_FILE, 
163    ]) 
164   
165   
166 -def GetLogFilename(daemon_name):
167 """Returns the full path for a daemon's log file. 168 169 """ 170 return "%s/%s.log" % (LOG_DIR, daemon_name)
171 172 173 LOG_WATCHER = GetLogFilename("watcher") 174 LOG_COMMANDS = GetLogFilename("commands") 175 LOG_BURNIN = GetLogFilename("burnin") 176