mirror of https://github.com/apache/cloudstack.git
77 lines
2.6 KiB
Python
Executable File
77 lines
2.6 KiB
Python
Executable File
# Copyright 2012 Citrix Systems, Inc. Licensed under the
|
|
# Apache License, Version 2.0 (the "License"); you may not use this
|
|
# file except in compliance with the License. Citrix Systems, Inc.
|
|
# reserves all rights not expressly granted by the License.
|
|
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
# Automatically generated by addcopyright.py at 04/03/2012
|
|
from OvmCommonModule import *
|
|
|
|
logger = OvmLogger('OvmOCFS2')
|
|
class OvmOCFS2(OvmObject):
|
|
def _prepareConf(self, cluster):
|
|
conf = '''cluster:
|
|
node_count = 0
|
|
name = %s
|
|
'''%cluster
|
|
dir = dirname(OCFS2_CONF)
|
|
if not isdir(dir):
|
|
os.makedirs(dir)
|
|
|
|
fd = open(OCFS2_CONF, 'w')
|
|
fd.write(conf)
|
|
fd.close()
|
|
|
|
def _addNode(self, name, nodeNum, ip, port, cluster, isOnline=True):
|
|
nodePath = '/sys/kernel/config/cluster/%s/node/%s'%(cluster, name)
|
|
if exists(nodePath):
|
|
logger.debug(OvmOCFS2._addNode, "node %s already exists, skip it(%s)"%(name, nodePath))
|
|
return
|
|
|
|
if not isOnline:
|
|
cmds = ['o2cb_ctl -C -n', name, '-t node', '-a number=%s'%nodeNum, '-a ip_address=%s'%ip, '-a ip_port=%s'%port, '-a cluster=%s'%cluster]
|
|
else:
|
|
cmds = ['o2cb_ctl -C -i -n', name, '-t node', '-a number=%s'%nodeNum, '-a ip_address=%s'%ip, '-a ip_port=%s'%port, '-a cluster=%s'%cluster]
|
|
|
|
try:
|
|
doCmd(cmds)
|
|
except ShellExceutedFailedException, e:
|
|
if e.errCode == 239 or "already exists" in e.stderr:
|
|
logger.debug(OvmOCFS2._addNode, "node %s already exists, skip it(%s)"%(name, e.stderr))
|
|
else:
|
|
raise e
|
|
|
|
def _isClusterOnline(self, cluster):
|
|
cmds = ['service o2cb status', cluster]
|
|
res = doCmd(cmds)
|
|
for line in res.split('\n'):
|
|
if not 'Checking O2CB cluster' in line: continue
|
|
return not 'Offline' in line
|
|
|
|
def _load(self):
|
|
cmd = ['service o2cb load']
|
|
doCmd(cmd)
|
|
|
|
def _start(self, cluster):
|
|
#blank line are answer by clicking enter
|
|
config='''
|
|
y
|
|
o2cb
|
|
%s
|
|
|
|
|
|
|
|
|
|
EOF
|
|
'''%cluster
|
|
cmd = ['service o2cb configure', '<<EOF', config]
|
|
doCmd(cmd)
|
|
cmd = ['service o2cb start %s'%cluster]
|
|
doCmd(cmd)
|
|
|