constants.py 7.29 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
85
86
87
88
89
RUN_GANETI_DIR = RUN_DIR + "/ganeti"
BDEV_CACHE_DIR = RUN_GANETI_DIR # TODO(2.0): move deeper
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
NODE_INITD_SCRIPT = _autoconf.SYSCONFDIR + "/init.d/ganeti"
Iustin Pop's avatar
Iustin Pop committed
101
102
103
DEFAULT_NODED_PORT = 1811
FIRST_DRBD_PORT = 11000
LAST_DRBD_PORT = 14999
104
MASTER_SCRIPT = "ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
105

106
LOG_DIR = _autoconf.LOCALSTATEDIR + "/log/ganeti"
Iustin Pop's avatar
Iustin Pop committed
107
108
LOG_OS_DIR = LOG_DIR + "/os"
LOG_NODESERVER = LOG_DIR + "/node-daemon.log"
109
LOG_WATCHER = LOG_DIR + "/watcher.log"
110
LOG_MASTERDAEMON = LOG_DIR + "/master-daemon.log"
111
112
LOG_RAPISERVER = LOG_DIR + "/rapi-daemon.log"
LOG_RAPIACCESS = LOG_DIR + "/rapi-access.log"
Iustin Pop's avatar
Iustin Pop committed
113

114
OS_SEARCH_PATH = _autoconf.OS_SEARCH_PATH
115
EXPORT_DIR = _autoconf.EXPORT_DIR
Iustin Pop's avatar
Iustin Pop committed
116
117
118

EXPORT_CONF_FILE = "config.ini"

119
120
121
XEN_KERNEL = _autoconf.XEN_KERNEL
XEN_INITRD = _autoconf.XEN_INITRD

122
123
124
VALUE_DEFAULT = "default"
VALUE_NONE = "none"

Iustin Pop's avatar
Iustin Pop committed
125
# hooks-related constants
126
HOOKS_BASE_DIR = _autoconf.SYSCONFDIR + "/ganeti/hooks"
Iustin Pop's avatar
Iustin Pop committed
127
128
HOOKS_PHASE_PRE = "pre"
HOOKS_PHASE_POST = "post"
129
HOOKS_NAME_CFGUPDATE = "config-update"
Iustin Pop's avatar
Iustin Pop committed
130
131
132
133
134
135
136
137
138
139
140
141
142
143
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"
144
DT_DRBD8 = "drbd"
145
DT_FILE = "file"
146
147

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

150
151
152
# the set of non-lvm-based disk templates
DTS_NOT_LVM = frozenset([DT_DISKLESS, DT_FILE])

153
154
# logical disk types
LD_LV = "lvm"
155
LD_DRBD8 = "drbd8"
156
157
158
159
160
LD_FILE = "file"

# file backend driver
FD_LOOP = "loop"
FD_BLKTAP = "blktap"
161
162

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

165
166
167
168
169
# disk replacement mode
REPLACE_DISK_PRI = "replace_primary"
REPLACE_DISK_SEC = "replace_secondary"
REPLACE_DISK_ALL = "replace_all"

170
# instance creation modes
Iustin Pop's avatar
Iustin Pop committed
171
172
173
174
INSTANCE_CREATE = "create"
INSTANCE_IMPORT = "import"

DISK_TEMPLATES = frozenset([DT_DISKLESS, DT_PLAIN,
175
176
177
                            DT_DRBD8, DT_FILE])

FILE_DRIVER = frozenset([FD_LOOP, FD_BLKTAP])
Iustin Pop's avatar
Iustin Pop committed
178
179
180
181

# import/export config options
INISECT_EXP = "export"
INISECT_INS = "instance"
182
183

# common exit codes
Iustin Pop's avatar
Iustin Pop committed
184
EXIT_SUCCESS = 0
185
EXIT_FAILURE = 1
186
EXIT_NOTMASTER = 11
187
EXIT_NODESETUP_ERROR = 12
Iustin Pop's avatar
Iustin Pop committed
188
EXIT_CONFIRMATION = 13 # need user confirmation
189

190
191
192
193
194
195
196
# tags
TAG_CLUSTER = "cluster"
TAG_NODE = "node"
TAG_INSTANCE = "instance"
MAX_TAG_LEN = 128
MAX_TAGS_PER_OBJ = 4096

197
198
# others
DEFAULT_BRIDGE = "xen-br0"
199
SYNC_SPEED = 30 * 1024
Iustin Pop's avatar
Iustin Pop committed
200
LOCALHOST_IP_ADDRESS = "127.0.0.1"
201
TCP_PING_TIMEOUT = 10
202
GANETI_RUNAS = "root"
203
DEFAULT_VG = "xenvg"
204
BIND_ADDRESS_GLOBAL = "0.0.0.0"
205
MIN_VG_SIZE = 20480
206

207
208
209
# valid os status
OS_VALID_STATUS = "VALID"

210
# ssh constants
211
SSH_INITD_SCRIPT = _autoconf.SSH_INITD_SCRIPT
212
213
214
215
216
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"
217
218
SSH = "ssh"
SCP = "scp"
219
220
221
222
223

# reboot types
INSTANCE_REBOOT_SOFT = "soft"
INSTANCE_REBOOT_HARD = "hard"
INSTANCE_REBOOT_FULL = "full"
224
225

# Hypervisor constants
226
HT_XEN_PVM30 = "xen-3.0"
227
HT_FAKE = "fake"
228
229
230
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])
231

232
HT_HVM_VNC_BASE_PORT = 5900
233
HT_HVM_DEFAULT_BOOT_ORDER = 'dc'
234
VNC_PASSWORD_FILE = _autoconf.SYSCONFDIR + "/ganeti/vnc-cluster-password"
235
VNC_DEFAULT_BIND_ADDRESS = '0.0.0.0'
236
237
238
239
240

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

241
# Allocator framework constants
242
243
244
245
246
IALLOCATOR_DIR_IN = "in"
IALLOCATOR_DIR_OUT = "out"
IALLOCATOR_MODE_ALLOC = "allocate"
IALLOCATOR_MODE_RELOC = "relocate"
IALLOCATOR_SEARCH_PATH = _autoconf.IALLOCATOR_SEARCH_PATH
247
248
249
IARUN_NOTFOUND = 1
IARUN_FAILURE = 2
IARUN_SUCCESS = 3
250

251
252
253
254
255
256
# 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"

257
258
JOB_ID_TEMPLATE = r"\d+"

259
260
261
262
263
264
265
266
267
268
269
# 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"
OP_STATUS_SUCCESS = "success"
OP_STATUS_ERROR = "error"
270
271
272
273

# Execution log types
ELOG_MESSAGE = "message"
ELOG_PROGRESS = "progress"
274
275
276
277

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