constants.py 7.45 KB
Newer Older
Iustin Pop's avatar
Iustin Pop committed
1
#
Iustin Pop's avatar
Iustin Pop committed
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#

# Copyright (C) 2006, 2007 Google Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.


"""Module holding different constants."""

24
from ganeti import _autoconf
25

Iustin Pop's avatar
Iustin Pop committed
26
# various versions
27
PROTOCOL_VERSION = 13
28
RELEASE_VERSION = _autoconf.PACKAGE_VERSION
29
OS_API_VERSION = 5
Iustin Pop's avatar
Iustin Pop committed
30
EXPORT_VERSION = 0
31
RAPI_VERSION = 2
Iustin Pop's avatar
Iustin Pop committed
32

33

34
35
36
37
38
39
40
41
# Format for CONFIG_VERSION:
#   01 03 0123 = 01030123
#   ^^ ^^ ^^^^
#   |  |  + Configuration version/revision
#   |  + Minor version
#   + Major version
#
# It stored as an integer. Make sure not to write an octal number.
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75

# BuildVersion and SplitVersion must be in here because we can't import other
# modules. The cfgupgrade tool must be able to read and write version numbers
# and thus requires these functions. To avoid code duplication, they're kept in
# here.

def BuildVersion(major, minor, revision):
  """Calculates int version number from major, minor and revision numbers.

  Returns: int representing version number

  """
  assert isinstance(major, int)
  assert isinstance(minor, int)
  assert isinstance(revision, int)
  return (1000000 * major +
            10000 * minor +
                1 * revision)


def SplitVersion(version):
  """Splits version number stored in an int.

  Returns: tuple; (major, minor, revision)

  """
  assert isinstance(version, int)

  (major, remainder) = divmod(version, 1000000)
  (minor, revision) = divmod(remainder, 10000)

  return (major, minor, revision)


76
77
78
CONFIG_MAJOR = int(_autoconf.VERSION_MAJOR)
CONFIG_MINOR = int(_autoconf.VERSION_MINOR)
CONFIG_REVISION = 0
79
CONFIG_VERSION = BuildVersion(CONFIG_MAJOR, CONFIG_MINOR, CONFIG_REVISION)
Iustin Pop's avatar
Iustin Pop committed
80
81

# file paths
82
DATA_DIR = _autoconf.LOCALSTATEDIR + "/lib/ganeti"
83
RUN_DIR = _autoconf.LOCALSTATEDIR + "/run"
84
RUN_GANETI_DIR = RUN_DIR + "/ganeti"
85
BDEV_CACHE_DIR = RUN_GANETI_DIR + "/bdev-cache"
86
87
88
89
DISK_LINKS_DIR = RUN_GANETI_DIR + "/instance-disks"
# keep RUN_GANETI_DIR first here, to make sure all get created when the node
# daemon is started (this takes care of RUN_DIR being tmpfs)
SUB_RUN_DIRS = [ RUN_GANETI_DIR, BDEV_CACHE_DIR, DISK_LINKS_DIR ]
Iustin Pop's avatar
Iustin Pop committed
90
LOCK_DIR = _autoconf.LOCALSTATEDIR + "/lock"
Iustin Pop's avatar
Iustin Pop committed
91
92
CLUSTER_CONF_FILE = DATA_DIR + "/config.data"
SSL_CERT_FILE = DATA_DIR + "/server.pem"
93
WATCHER_STATEFILE = DATA_DIR + "/watcher.data"
Iustin Pop's avatar
Iustin Pop committed
94
SSH_KNOWN_HOSTS_FILE = DATA_DIR + "/known_hosts"
95
QUEUE_DIR = DATA_DIR + "/queue"
96
ETC_HOSTS = "/etc/hosts"
97
DEFAULT_FILE_STORAGE_DIR = _autoconf.FILE_STORAGE_DIR
98
MASTER_SOCKET = RUN_GANETI_DIR + "/master.sock"
Iustin Pop's avatar
Iustin Pop committed
99

100
101
102
103
104
# PID files
MASTERD_PID = "ganeti-master"
NODED_PID = "ganeti-noded"
RAPI_PID = "ganeti-rapi"

105
NODE_INITD_SCRIPT = _autoconf.SYSCONFDIR + "/init.d/ganeti"
Iustin Pop's avatar
Iustin Pop committed
106
107
108
DEFAULT_NODED_PORT = 1811
FIRST_DRBD_PORT = 11000
LAST_DRBD_PORT = 14999
109
MASTER_SCRIPT = "ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
110

111
LOG_DIR = _autoconf.LOCALSTATEDIR + "/log/ganeti"
Iustin Pop's avatar
Iustin Pop committed
112
113
LOG_OS_DIR = LOG_DIR + "/os"
LOG_NODESERVER = LOG_DIR + "/node-daemon.log"
114
LOG_WATCHER = LOG_DIR + "/watcher.log"
115
LOG_MASTERDAEMON = LOG_DIR + "/master-daemon.log"
116
117
LOG_RAPISERVER = LOG_DIR + "/rapi-daemon.log"
LOG_RAPIACCESS = LOG_DIR + "/rapi-access.log"
Iustin Pop's avatar
Iustin Pop committed
118

119
OS_SEARCH_PATH = _autoconf.OS_SEARCH_PATH
120
EXPORT_DIR = _autoconf.EXPORT_DIR
Iustin Pop's avatar
Iustin Pop committed
121
122
123

EXPORT_CONF_FILE = "config.ini"

124
125
126
XEN_KERNEL = _autoconf.XEN_KERNEL
XEN_INITRD = _autoconf.XEN_INITRD

127
128
129
VALUE_DEFAULT = "default"
VALUE_NONE = "none"

Iustin Pop's avatar
Iustin Pop committed
130
# hooks-related constants
131
HOOKS_BASE_DIR = _autoconf.SYSCONFDIR + "/ganeti/hooks"
Iustin Pop's avatar
Iustin Pop committed
132
133
HOOKS_PHASE_PRE = "pre"
HOOKS_PHASE_POST = "post"
134
HOOKS_NAME_CFGUPDATE = "config-update"
Iustin Pop's avatar
Iustin Pop committed
135
136
137
138
139
140
141
142
143
144
145
146
147
148
HOOKS_VERSION = 1

# hooks subject type (what object type does the LU deal with)
HTYPE_CLUSTER = "CLUSTER"
HTYPE_NODE = "NODE"
HTYPE_INSTANCE = "INSTANCE"

HKR_SKIP = 0
HKR_FAIL = 1
HKR_SUCCESS = 2

# disk template types
DT_DISKLESS = "diskless"
DT_PLAIN = "plain"
149
DT_DRBD8 = "drbd"
150
DT_FILE = "file"
151
152

# the set of network-mirrored disk templates
153
DTS_NET_MIRROR = frozenset([DT_DRBD8])
Iustin Pop's avatar
Iustin Pop committed
154

155
156
157
# the set of non-lvm-based disk templates
DTS_NOT_LVM = frozenset([DT_DISKLESS, DT_FILE])

158
159
# logical disk types
LD_LV = "lvm"
160
LD_DRBD8 = "drbd8"
161
162
163
164
165
LD_FILE = "file"

# file backend driver
FD_LOOP = "loop"
FD_BLKTAP = "blktap"
166
167

# the set of drbd-like disk types
168
LDS_DRBD = frozenset([LD_DRBD8])
169

170
171
172
173
174
# disk replacement mode
REPLACE_DISK_PRI = "replace_primary"
REPLACE_DISK_SEC = "replace_secondary"
REPLACE_DISK_ALL = "replace_all"

175
# instance creation modes
Iustin Pop's avatar
Iustin Pop committed
176
177
178
179
INSTANCE_CREATE = "create"
INSTANCE_IMPORT = "import"

DISK_TEMPLATES = frozenset([DT_DISKLESS, DT_PLAIN,
180
181
182
                            DT_DRBD8, DT_FILE])

FILE_DRIVER = frozenset([FD_LOOP, FD_BLKTAP])
Iustin Pop's avatar
Iustin Pop committed
183
184
185
186

# import/export config options
INISECT_EXP = "export"
INISECT_INS = "instance"
187
188

# common exit codes
Iustin Pop's avatar
Iustin Pop committed
189
EXIT_SUCCESS = 0
190
EXIT_FAILURE = 1
191
EXIT_NOTMASTER = 11
192
EXIT_NODESETUP_ERROR = 12
Iustin Pop's avatar
Iustin Pop committed
193
EXIT_CONFIRMATION = 13 # need user confirmation
194

195
196
197
198
199
200
201
# tags
TAG_CLUSTER = "cluster"
TAG_NODE = "node"
TAG_INSTANCE = "instance"
MAX_TAG_LEN = 128
MAX_TAGS_PER_OBJ = 4096

202
203
# others
DEFAULT_BRIDGE = "xen-br0"
204
SYNC_SPEED = 30 * 1024
Iustin Pop's avatar
Iustin Pop committed
205
LOCALHOST_IP_ADDRESS = "127.0.0.1"
206
TCP_PING_TIMEOUT = 10
207
GANETI_RUNAS = "root"
208
DEFAULT_VG = "xenvg"
209
BIND_ADDRESS_GLOBAL = "0.0.0.0"
210
MIN_VG_SIZE = 20480
211

212
213
214
# valid os status
OS_VALID_STATUS = "VALID"

215
# ssh constants
216
SSH_INITD_SCRIPT = _autoconf.SSH_INITD_SCRIPT
217
218
219
220
221
SSH_CONFIG_DIR = "/etc/ssh/"
SSH_HOST_DSA_PRIV = SSH_CONFIG_DIR + "ssh_host_dsa_key"
SSH_HOST_DSA_PUB = SSH_HOST_DSA_PRIV + ".pub"
SSH_HOST_RSA_PRIV = SSH_CONFIG_DIR + "ssh_host_rsa_key"
SSH_HOST_RSA_PUB = SSH_HOST_RSA_PRIV + ".pub"
222
223
SSH = "ssh"
SCP = "scp"
224
225
226
227
228

# reboot types
INSTANCE_REBOOT_SOFT = "soft"
INSTANCE_REBOOT_HARD = "hard"
INSTANCE_REBOOT_FULL = "full"
229
230

# Hypervisor constants
231
HT_XEN_PVM30 = "xen-3.0"
232
HT_FAKE = "fake"
233
234
235
HT_XEN_HVM31 = "xen-hvm-3.1"
HYPER_TYPES = frozenset([HT_XEN_PVM30, HT_FAKE, HT_XEN_HVM31])
HTS_REQ_PORT = frozenset([HT_XEN_HVM31])
236

237
HT_HVM_VNC_BASE_PORT = 5900
238
HT_HVM_DEFAULT_BOOT_ORDER = 'dc'
239
VNC_PASSWORD_FILE = _autoconf.SYSCONFDIR + "/ganeti/vnc-cluster-password"
240
VNC_DEFAULT_BIND_ADDRESS = '0.0.0.0'
241
242
243
244
245

# Cluster Verify steps
VERIFY_NPLUSONE_MEM = 'nplusone_mem'
VERIFY_OPTIONAL_CHECKS = frozenset([VERIFY_NPLUSONE_MEM])

246
# Allocator framework constants
247
248
249
250
251
IALLOCATOR_DIR_IN = "in"
IALLOCATOR_DIR_OUT = "out"
IALLOCATOR_MODE_ALLOC = "allocate"
IALLOCATOR_MODE_RELOC = "relocate"
IALLOCATOR_SEARCH_PATH = _autoconf.IALLOCATOR_SEARCH_PATH
252
253
254
IARUN_NOTFOUND = 1
IARUN_FAILURE = 2
IARUN_SUCCESS = 3
255

256
257
258
259
260
# Job queue
JOB_QUEUE_VERSION = 1
JOB_QUEUE_LOCK_FILE = QUEUE_DIR + "/lock"
JOB_QUEUE_VERSION_FILE = QUEUE_DIR + "/version"
JOB_QUEUE_SERIAL_FILE = QUEUE_DIR + "/serial"
261
JOB_QUEUE_ARCHIVE_DIR = QUEUE_DIR + "/archive"
262

263
264
JOB_ID_TEMPLATE = r"\d+"

265
266
267
268
269
270
271
272
273
# Job status
JOB_STATUS_QUEUED = "queued"
JOB_STATUS_RUNNING = "running"
JOB_STATUS_CANCELED = "canceled"
JOB_STATUS_SUCCESS = "success"
JOB_STATUS_ERROR = "error"

OP_STATUS_QUEUED = "queued"
OP_STATUS_RUNNING = "running"
274
OP_STATUS_CANCELED = "canceled"
275
276
OP_STATUS_SUCCESS = "success"
OP_STATUS_ERROR = "error"
277
278
279
280

# Execution log types
ELOG_MESSAGE = "message"
ELOG_PROGRESS = "progress"
281
282
283
284

# Temporary RAPI constants until we have cluster parameters
RAPI_ENABLE = True
RAPI_PORT = 5080