本文整理汇总了Python中ovs.extensions.generic.sshclient.SSHClient.dir_create方法的典型用法代码示例。如果您正苦于以下问题:Python SSHClient.dir_create方法的具体用法?Python SSHClient.dir_create怎么用?Python SSHClient.dir_create使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ovs.extensions.generic.sshclient.SSHClient
的用法示例。
在下文中一共展示了SSHClient.dir_create方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _deploy
# 需要导入模块: from ovs.extensions.generic.sshclient import SSHClient [as 别名]
# 或者: from ovs.extensions.generic.sshclient.SSHClient import dir_create [as 别名]
def _deploy(config):
"""
Deploys a complete cluster: Distributing the configuration files, creating directories and services
"""
logger.debug("Deploying cluster {0}".format(config.cluster_id))
for node in config.nodes:
logger.debug(" Deploying cluster {0} on {1}".format(config.cluster_id, node.ip))
ovs_client = SSHClient(node.ip)
root_client = SSHClient(node.ip, username="root")
# Distributes a configuration file to all its nodes
config.write_config(ovs_client)
# Create dirs as root because mountpoint /mnt/cache1 is typically owned by root
abs_paths = [node.log_dir, node.tlog_dir, node.home]
root_client.dir_create(abs_paths)
root_client.dir_chmod(abs_paths, 0755, recursive=True)
root_client.dir_chown(abs_paths, "ovs", "ovs", recursive=True)
# Creates services for/on all nodes in the config
base_name = "ovs-arakoon"
target_name = "ovs-arakoon-{0}".format(config.cluster_id)
ServiceManager.prepare_template(base_name, target_name, ovs_client)
ServiceManager.add_service(target_name, root_client, params={"CLUSTER": config.cluster_id})
logger.debug(" Deploying cluster {0} on {1} completed".format(config.cluster_id, node.ip))
示例2: setUp
# 需要导入模块: from ovs.extensions.generic.sshclient import SSHClient [as 别名]
# 或者: from ovs.extensions.generic.sshclient.SSHClient import dir_create [as 别名]
def setUp(cls):
for node in TestArakoonInstaller.nodes:
client = SSHClient(node)
client.dir_delete('/tmp/db')
client.dir_delete('/tmp/cfg')
client.dir_create('/tmp/db')
client.dir_create('/tmp/cfg')
示例3: _deploy
# 需要导入模块: from ovs.extensions.generic.sshclient import SSHClient [as 别名]
# 或者: from ovs.extensions.generic.sshclient.SSHClient import dir_create [as 别名]
def _deploy(config, offline_nodes=None):
"""
Deploys a complete cluster: Distributing the configuration files, creating directories and services
"""
ArakoonInstaller._logger.debug('Deploying cluster {0}'.format(config.cluster_id))
if offline_nodes is None:
offline_nodes = []
for node in config.nodes:
if node.ip in offline_nodes:
continue
ArakoonInstaller._logger.debug(' Deploying cluster {0} on {1}'.format(config.cluster_id, node.ip))
root_client = SSHClient(node.ip, username='root')
# Distributes a configuration file to all its nodes
config.write_config()
# Create dirs as root because mountpoint /mnt/cache1 is typically owned by root
abs_paths = [node.log_dir, node.tlog_dir, node.home]
if not root_client.dir_exists(abs_paths):
root_client.dir_create(abs_paths)
root_client.dir_chmod(abs_paths, 0755, recursive=True)
root_client.dir_chown(abs_paths, 'ovs', 'ovs', recursive=True)
# Creates services for/on all nodes in the config
base_name = 'ovs-arakoon'
target_name = 'ovs-arakoon-{0}'.format(config.cluster_id)
ServiceManager.add_service(base_name, root_client,
params={'CLUSTER': config.cluster_id,
'NODE_ID': node.name,
'CONFIG_PATH': ArakoonInstaller.ETCD_CONFIG_PATH.format(config.cluster_id)},
target_name=target_name)
ArakoonInstaller._logger.debug(' Deploying cluster {0} on {1} completed'.format(config.cluster_id, node.ip))
示例4: archive_existing_arakoon_data
# 需要导入模块: from ovs.extensions.generic.sshclient import SSHClient [as 别名]
# 或者: from ovs.extensions.generic.sshclient.SSHClient import dir_create [as 别名]
def archive_existing_arakoon_data(ip, directory, top_dir, cluster_name):
"""
Copy existing arakoon data, when setting up a new arakoon cluster, to the side
:param ip: IP on which to check for existing data
:param directory: Directory to check for existence
:param top_dir: Top directory
:param cluster_name: Name of arakoon cluster
:return: None
"""
new_client = SSHClient(ip)
logger.debug('archive - check if {0} exists'.format(directory))
if new_client.dir_exists(directory):
logger.debug('archive - from {0}'.format(directory))
archive_dir = '/'.join([top_dir, 'archive', cluster_name])
if new_client.dir_exists(archive_dir + '/' + os.path.basename(directory)):
logger.debug('archive - from existing archive {0}'.format(archive_dir))
timestamp = time.strftime('%Y%m%d%H%M%S', time.gmtime())
new_archive_dir = archive_dir + '-' + timestamp
new_client.dir_create(new_archive_dir)
new_client.run('mv {0} {1}'.format(archive_dir, new_archive_dir))
logger.debug('archive - to new {0}'.format(new_archive_dir))
logger.debug('create archive dir: {0}'.format(archive_dir))
new_client.dir_create(archive_dir)
logger.debug('archive from {0} to {1}'.format(directory, archive_dir))
if cluster_name == os.path.basename(directory) and new_client.dir_list(directory):
new_client.run('mv {0}/* {1}'.format(directory, archive_dir))
else:
new_client.run('mv {0} {1}'.format(directory, archive_dir))
示例5: setUp
# 需要导入模块: from ovs.extensions.generic.sshclient import SSHClient [as 别名]
# 或者: from ovs.extensions.generic.sshclient.SSHClient import dir_create [as 别名]
def setUp(cls):
for node in TestArakoonInstaller.nodes:
client = SSHClient(node)
root_client = SSHClient(node, username='root')
root_client.dir_delete('/tmp/db')
root_client.dir_create('/tmp/db')
client.dir_delete(TestArakoonInstaller.cluster_config_path)
client.dir_create(TestArakoonInstaller.cluster_config_path)
示例6: extend_cluster
# 需要导入模块: from ovs.extensions.generic.sshclient import SSHClient [as 别名]
# 或者: from ovs.extensions.generic.sshclient.SSHClient import dir_create [as 别名]
def extend_cluster(master_ip, new_ip, cluster_name):
"""
Extends a cluster to a given new node
:param cluster_name: Name of the cluster to be extended
:param new_ip: IP address of the node to be added
:param master_ip: IP of one of the already existing nodes
"""
logger.debug('Extending cluster "{0}" from {1} to {2}'.format(cluster_name, master_ip, new_ip))
client = SSHClient(master_ip, username='root')
if not EtcdInstaller._is_healty(cluster_name, client):
raise RuntimeError('Cluster "{0}" unhealthy, aborting extend'.format(cluster_name))
cluster_members = client.run('etcdctl member list').splitlines()
for cluster_member in cluster_members:
if EtcdInstaller.SERVER_URL.format(new_ip) in cluster_member:
logger.info('Node {0} already member of etcd cluster'.format(new_ip))
return
current_cluster = []
for item in client.run('etcdctl member list').splitlines():
info = re.search(EtcdInstaller.MEMBER_REGEX, item).groupdict()
current_cluster.append('{0}={1}'.format(info['name'], info['peer']))
client = SSHClient(new_ip, username='root')
node_name = System.get_my_machine_id(client)
current_cluster.append('{0}={1}'.format(node_name, EtcdInstaller.SERVER_URL.format(new_ip)))
data_dir = EtcdInstaller.DATA_DIR.format(EtcdInstaller.DB_DIR, cluster_name)
wal_dir = EtcdInstaller.WAL_DIR.format(EtcdInstaller.DB_DIR, cluster_name)
abs_paths = [data_dir, wal_dir]
client.dir_delete(abs_paths)
client.dir_create(abs_paths)
client.dir_chmod(abs_paths, 0755, recursive=True)
client.dir_chown(abs_paths, 'ovs', 'ovs', recursive=True)
base_name = 'ovs-etcd'
target_name = 'ovs-etcd-{0}'.format(cluster_name)
EtcdInstaller.stop(cluster_name, client) # Stop a possible proxy service
ServiceManager.add_service(base_name, client,
params={'CLUSTER': cluster_name,
'NODE_ID': node_name,
'DATA_DIR': data_dir,
'WAL_DIR': wal_dir,
'SERVER_URL': EtcdInstaller.SERVER_URL.format(new_ip),
'CLIENT_URL': EtcdInstaller.CLIENT_URL.format(new_ip),
'LOCAL_CLIENT_URL': EtcdInstaller.CLIENT_URL.format('127.0.0.1'),
'INITIAL_CLUSTER': ','.join(current_cluster),
'INITIAL_STATE': 'existing',
'INITIAL_PEERS': ''},
target_name=target_name)
master_client = SSHClient(master_ip, username='root')
master_client.run('etcdctl member add {0} {1}'.format(node_name, EtcdInstaller.SERVER_URL.format(new_ip)))
EtcdInstaller.start(cluster_name, client)
EtcdInstaller.wait_for_cluster(cluster_name, client)
logger.debug('Extending cluster "{0}" from {1} to {2} completed'.format(cluster_name, master_ip, new_ip))
示例7: clean_leftover_arakoon_data
# 需要导入模块: from ovs.extensions.generic.sshclient import SSHClient [as 别名]
# 或者: from ovs.extensions.generic.sshclient.SSHClient import dir_create [as 别名]
def clean_leftover_arakoon_data(ip, directories):
"""
Delete existing arakoon data or copy to the side
Directories should be a dict with key the absolute paths and value a boolean indicating archive or delete
eg: {'/var/log/arakoon/ovsdb': True, --> Files under this directory will be archived
'/opt/OpenvStorage/db/arakoon/ovsdb/tlogs': False} --> Files under this directory will be deleted
:param ip: IP on which to check for existing data
:type ip: str
:param directories: Directories to archive or delete
:type directories: dict
:return: None
"""
root_client = SSHClient(ip, username='root')
# Verify whether all files to be archived have been released properly
open_file_errors = []
ArakoonInstaller._logger.debug('Cleanup old arakoon - Checking open files')
dirs_with_files = {}
for directory, archive in directories.iteritems():
ArakoonInstaller._logger.debug('Cleaning old arakoon - Checking directory {0}'.format(directory))
if root_client.dir_exists(directory):
ArakoonInstaller._logger.debug('Cleaning old arakoon - Directory {0} exists'.format(directory))
file_names = root_client.file_list(directory, abs_path=True, recursive=True)
if len(file_names) > 0:
ArakoonInstaller._logger.debug('Cleaning old arakoon - Files found in directory {0}'.format(directory))
dirs_with_files[directory] = {'files': file_names,
'archive': archive}
for file_name in file_names:
try:
open_files = root_client.run('lsof {0}'.format(file_name))
if open_files != '':
open_file_errors.append('Open file {0} detected in directory {1}'.format(os.path.basename(file_name), directory))
except CalledProcessError:
continue
if len(open_file_errors) > 0:
raise RuntimeError('\n - ' + '\n - '.join(open_file_errors))
for directory, info in dirs_with_files.iteritems():
if info['archive'] is True:
# Create zipped tar
ArakoonInstaller._logger.debug('Cleanup old arakoon - Start archiving directory {0}'.format(directory))
archive_dir = '{0}/archive'.format(directory)
if not root_client.dir_exists(archive_dir):
ArakoonInstaller._logger.debug('Cleanup old arakoon - Creating archive directory {0}'.format(archive_dir))
root_client.dir_create(archive_dir)
ArakoonInstaller._logger.debug('Cleanup old arakoon - Creating tar file')
tar_name = '{0}/{1}.tgz'.format(archive_dir, int(time.time()))
root_client.run('cd {0}; tar -cz -f {1} --exclude "archive" *'.format(directory, tar_name))
ArakoonInstaller._logger.debug('Cleanup old arakoon - Removing old files from {0}'.format(directory))
root_client.file_delete(info['files'])
示例8: create_volume
# 需要导入模块: from ovs.extensions.generic.sshclient import SSHClient [as 别名]
# 或者: from ovs.extensions.generic.sshclient.SSHClient import dir_create [as 别名]
def create_volume(size, vpool, name=None, loop_device=None, root_client=None, wait=True):
"""
Create a volume
:param size: Size of the volume (in GB)
:param vpool: vPool to create a volume for
:param name: Name for the volume
:param loop_device: Loop device to use to mount volume on
:param root_client: SSHClient object
:param wait: Wait for the volume to be created on volumedriver and in model
:return: Newly created Virtual Disk
"""
location = GeneralVDisk.get_filesystem_location(vpool=vpool,
vdisk_name=name if name is not None else uuid.uuid4())
if root_client is None:
root_client = SSHClient('127.0.0.1', username='root')
try:
if loop_device is not None:
root_client.run('umount /mnt/{0} | echo true'.format(loop_device))
root_client.run('losetup -d /dev/{0} | echo true'.format(loop_device))
root_client.run('rm {0} | echo true'.format(location))
root_client.run('truncate -s {0}G {1}'.format(size, location))
root_client.run('losetup /dev/{0} {1}'.format(loop_device, location))
root_client.dir_create('/mnt/{0}'.format(loop_device))
root_client.run('parted /dev/{0} mklabel gpt'.format(loop_device))
root_client.run('parted -a optimal /dev/{0} mkpart primary ext4 0% 100%'.format(loop_device))
root_client.run('partprobe; echo true')
root_client.run('mkfs.ext4 /dev/{0}'.format(loop_device))
root_client.run('mount -t ext4 /dev/{0} /mnt/{0}'.format(loop_device))
else:
root_client.run('truncate -s {0}G {1}'.format(size, location))
except CalledProcessError as _:
cmd = """
umount /mnt/{0};
losetup -d /dev/{0};
rm {1}""".format(loop_device, location)
root_client.run(cmd)
raise
vdisk = None
if wait is True:
counter = 0
timeout = 60
volume_name = os.path.basename(location).replace('-flat.vmdk', '').replace('.raw', '')
while True and counter < timeout:
time.sleep(1)
vdisks = GeneralVDisk.get_vdisk_by_name(name=volume_name)
if vdisks is not None:
vdisk = vdisks[0]
break
counter += 1
if counter == timeout:
raise RuntimeError('Disk {0} did not show up in model after {1} seconds'.format(volume_name, timeout))
return vdisk
示例9: _deploy
# 需要导入模块: from ovs.extensions.generic.sshclient import SSHClient [as 别名]
# 或者: from ovs.extensions.generic.sshclient.SSHClient import dir_create [as 别名]
def _deploy(config, filesystem, offline_nodes=None, plugins=None, delay_service_registration=False):
"""
Deploys a complete cluster: Distributing the configuration files, creating directories and services
"""
if os.environ.get('RUNNING_UNITTESTS') == 'True':
if filesystem is True:
raise NotImplementedError('At this moment, there is no support for unit-testing filesystem backend Arakoon clusters')
ArakoonInstaller._logger.debug('Deploying cluster {0}'.format(config.cluster_id))
if offline_nodes is None:
offline_nodes = []
service_metadata = {}
for node in config.nodes:
if node.ip in offline_nodes:
continue
ArakoonInstaller._logger.debug(' Deploying cluster {0} on {1}'.format(config.cluster_id, node.ip))
root_client = SSHClient(node.ip, username='root')
# Distributes a configuration file to all its nodes
config.write_config(node.ip)
# Create dirs as root because mountpoint /mnt/cache1 is typically owned by root
abs_paths = {node.tlog_dir, node.home} # That's a set
if node.log_sinks.startswith('/'):
abs_paths.add(os.path.dirname(os.path.abspath(node.log_sinks)))
if node.crash_log_sinks.startswith('/'):
abs_paths.add(os.path.dirname(os.path.abspath(node.crash_log_sinks)))
abs_paths = list(abs_paths)
root_client.dir_create(abs_paths)
root_client.dir_chmod(abs_paths, 0755, recursive=True)
root_client.dir_chown(abs_paths, 'ovs', 'ovs', recursive=True)
# Creates services for/on all nodes in the config
if config.filesystem is True:
config_path = config.config_path
else:
config_path = Configuration.get_configuration_path(config.config_path)
extra_version_cmd = ''
if plugins is not None:
extra_version_cmd = ';'.join(plugins)
metadata = ServiceManager.add_service(name='ovs-arakoon',
client=root_client,
params={'CLUSTER': config.cluster_id,
'NODE_ID': node.name,
'CONFIG_PATH': config_path,
'EXTRA_VERSION_CMD': extra_version_cmd},
target_name='ovs-arakoon-{0}'.format(config.cluster_id),
startup_dependency=('ovs-watcher-config' if filesystem is False else None),
delay_registration=delay_service_registration)
service_metadata[node.ip] = metadata
ArakoonInstaller._logger.debug(' Deploying cluster {0} on {1} completed'.format(config.cluster_id, node.ip))
return service_metadata
示例10: create_cluster
# 需要导入模块: from ovs.extensions.generic.sshclient import SSHClient [as 别名]
# 或者: from ovs.extensions.generic.sshclient.SSHClient import dir_create [as 别名]
def create_cluster(cluster_name, ip, server_port=DEFAULT_SERVER_PORT, client_port=DEFAULT_CLIENT_PORT):
"""
Creates a cluster
:param cluster_name: Name of the cluster
:type cluster_name: str
:param ip: IP address of the first node of the new cluster
:type ip: str
:param server_port: Port to be used by server
:type server_port: int
:param client_port: Port to be used by client
:type client_port: int
:return: None
"""
EtcdInstaller._logger.debug('Creating cluster "{0}" on {1}'.format(cluster_name, ip))
client = SSHClient(ip, username='root')
target_name = 'ovs-etcd-{0}'.format(cluster_name)
if ServiceManager.has_service(target_name, client) and ServiceManager.get_service_status(target_name, client) is True:
EtcdInstaller._logger.info('Service {0} already configured and running'.format(target_name))
return
node_name = System.get_my_machine_id(client)
data_dir = EtcdInstaller.DATA_DIR.format(cluster_name)
wal_dir = EtcdInstaller.WAL_DIR.format(cluster_name)
abs_paths = [data_dir, wal_dir]
client.dir_delete(abs_paths)
client.dir_create(abs_paths)
client.dir_chmod(abs_paths, 0755, recursive=True)
client.dir_chown(abs_paths, 'ovs', 'ovs', recursive=True)
base_name = 'ovs-etcd'
ServiceManager.add_service(base_name, client,
params={'CLUSTER': cluster_name,
'NODE_ID': node_name,
'DATA_DIR': data_dir,
'WAL_DIR': wal_dir,
'SERVER_URL': EtcdInstaller.SERVER_URL.format(ip, server_port),
'CLIENT_URL': EtcdInstaller.CLIENT_URL.format(ip, client_port),
'LOCAL_CLIENT_URL': EtcdInstaller.CLIENT_URL.format('127.0.0.1', client_port),
'INITIAL_CLUSTER': '{0}={1}'.format(node_name, EtcdInstaller.SERVER_URL.format(ip, server_port)),
'INITIAL_STATE': 'new',
'INITIAL_PEERS': '-initial-advertise-peer-urls {0}'.format(EtcdInstaller.SERVER_URL.format(ip, server_port))},
target_name=target_name)
EtcdInstaller.start(cluster_name, client)
EtcdInstaller.wait_for_cluster(cluster_name, client, client_port=client_port)
EtcdInstaller._logger.debug('Creating cluster "{0}" on {1} completed'.format(cluster_name, ip))
示例11: create_volume
# 需要导入模块: from ovs.extensions.generic.sshclient import SSHClient [as 别名]
# 或者: from ovs.extensions.generic.sshclient.SSHClient import dir_create [as 别名]
def create_volume(size, vpool, name=None, loop_device=None, root_client=None, wait=True):
"""
Create a volume
:param size: Size of the volume (in GB)
:param vpool: vPool to create a volume for
:param name: Name for the volume
:param loop_device: Loop device to use to mount volume on
:param root_client: SSHClient object
:param wait: Wait for the volume to be created on volumedriver and in model
:return: Newly created Virtual Disk
"""
location = GeneralVDisk.get_filesystem_location(vpool=vpool,
vdisk_name=name if name is not None else uuid.uuid4())
if root_client is None:
root_client = SSHClient('127.0.0.1', username='root')
try:
if loop_device is not None:
root_client.run('umount /mnt/{0}'.format(loop_device), allow_nonzero=True, allow_insecure=True)
root_client.run(['truncate', '-s', '{0}G'.format(size), location])
root_client.dir_create(['/mnt/{0}'.format(loop_device)])
root_client.run(['mkfs.ext4', '-F', location])
root_client.run(['mount', '-o', 'loop', location, '/mnt/{0}'.format(loop_device)])
else:
root_client.run(['truncate', '-s', '{0}G'.format(size), location])
except CalledProcessError as cpe:
GeneralVDisk.logger.error(str(cpe))
if loop_device is not None:
root_client.run('umount /mnt/{0}'.format(loop_device), allow_nonzero=True, allow_insecure=True)
root_client.run('rm {0}'.format(location), allow_nonzero=True, allow_insecure=True)
root_client.run('rmdir /mnt/{0}'.format(loop_device), allow_nonzero=True, allow_insecure=True)
raise
vdisk = None
if wait is True:
counter = 0
timeout = 60
volume_name = '/' + os.path.basename(location)
while True and counter < timeout:
time.sleep(1)
vdisk = VDiskList.get_by_devicename_and_vpool(volume_name, vpool)
if vdisk is not None:
break
counter += 1
if counter == timeout:
raise RuntimeError('Disk {0} did not show up in model after {1} seconds'.format(volume_name, timeout))
return vdisk
示例12: ovs_3671_validate_archiving_of_existing_arakoon_data_on_create_test
# 需要导入模块: from ovs.extensions.generic.sshclient import SSHClient [as 别名]
# 或者: from ovs.extensions.generic.sshclient.SSHClient import dir_create [as 别名]
def ovs_3671_validate_archiving_of_existing_arakoon_data_on_create_test():
"""
Validate arakoon archiving on extending a cluster with already existing data
"""
first_sr = GeneralStorageRouter.get_storage_routers()[0]
cluster_name = 'OVS_3671-single-node-cluster'
cluster_basedir = '/var/tmp'
root_client = SSHClient(first_sr, username='root')
for directory in ['/'.join([cluster_basedir, 'arakoon']), '/var/log/arakoon']:
root_client.dir_create(os.path.dirname(directory))
root_client.dir_chmod(os.path.dirname(directory), 0755, recursive=True)
root_client.dir_chown(os.path.dirname(directory), 'ovs', 'ovs', recursive=True)
files_to_create = ['/'.join([cluster_basedir, 'arakoon', cluster_name, 'db', 'one.db']),
'/'.join([cluster_basedir, 'arakoon', cluster_name, 'tlogs', 'one.tlog'])]
client = SSHClient(first_sr, username='ovs')
for filename in files_to_create:
client.dir_create(os.path.dirname(filename))
client.dir_chmod(os.path.dirname(filename), 0755, recursive=True)
client.dir_chown(os.path.dirname(filename), 'ovs', 'ovs', recursive=True)
client.file_create(files_to_create)
for filename in files_to_create:
assert client.file_exists(filename) is True, 'File {0} not present'.format(filename)
TestArakoon.logger.info('===================================================')
TestArakoon.logger.info('setup and validate single node cluster')
create_info = ArakoonInstaller.create_cluster(cluster_name, ServiceType.ARAKOON_CLUSTER_TYPES.FWK, first_sr.ip,
cluster_basedir, filesystem=False)
TestArakoon.logger.info('create_info: \n{0}'.format(create_info))
ArakoonInstaller.start_cluster(cluster_name, first_sr.ip, False)
ArakoonInstaller.claim_cluster(cluster_name, first_sr, False, metadata=create_info['metadata'])
TestArakoon.validate_arakoon_config_files([first_sr], cluster_name)
TestArakoon.verify_arakoon_structure(root_client, cluster_name, True, True)
for filename in files_to_create:
assert client.file_exists(filename) is False, 'File {0} is missing'.format(filename)
TestArakoon.logger.info('===================================================')
TestArakoon.logger.info('remove cluster')
ArakoonInstaller.delete_cluster(cluster_name, first_sr.ip, False)
for filename in files_to_create:
assert client.file_exists(filename) is False, 'File {0} is missing'.format(filename)
TestArakoon.verify_arakoon_structure(root_client, cluster_name, False, False)
示例13: _deploy
# 需要导入模块: from ovs.extensions.generic.sshclient import SSHClient [as 别名]
# 或者: from ovs.extensions.generic.sshclient.SSHClient import dir_create [as 别名]
def _deploy(config, filesystem, offline_nodes=None):
"""
Deploys a complete cluster: Distributing the configuration files, creating directories and services
"""
if os.environ.get('RUNNING_UNITTESTS') == 'True':
if filesystem is True:
raise NotImplementedError('At this moment, there is no support for unittesting filesystem backend Arakoon clusters')
ArakoonInstaller._logger.debug('Deploying cluster {0}'.format(config.cluster_id))
if offline_nodes is None:
offline_nodes = []
for node in config.nodes:
if node.ip in offline_nodes:
continue
ArakoonInstaller._logger.debug(' Deploying cluster {0} on {1}'.format(config.cluster_id, node.ip))
root_client = SSHClient(node.ip, username='root')
# Distributes a configuration file to all its nodes
config.write_config(node.ip)
# Create dirs as root because mountpoint /mnt/cache1 is typically owned by root
abs_paths = {node.tlog_dir, node.home} # That's a set
if node.log_sinks.startswith('/'):
abs_paths.add(os.path.dirname(os.path.abspath(node.log_sinks)))
if node.crash_log_sinks.startswith('/'):
abs_paths.add(os.path.dirname(os.path.abspath(node.crash_log_sinks)))
abs_paths = list(abs_paths)
root_client.dir_create(abs_paths)
root_client.dir_chmod(abs_paths, 0755, recursive=True)
root_client.dir_chown(abs_paths, 'ovs', 'ovs', recursive=True)
# Creates services for/on all nodes in the config
if config.filesystem is True:
config_path = config.config_path
else:
config_path = Configuration.get_configuration_path(config.config_path)
base_name = 'ovs-arakoon'
target_name = 'ovs-arakoon-{0}'.format(config.cluster_id)
ServiceManager.add_service(base_name, root_client,
params={'CLUSTER': config.cluster_id,
'NODE_ID': node.name,
'CONFIG_PATH': config_path,
'STARTUP_DEPENDENCY': 'started ovs-watcher-config' if filesystem is False else '(local-filesystems and started networking)'},
target_name=target_name)
ArakoonInstaller._logger.debug(' Deploying cluster {0} on {1} completed'.format(config.cluster_id, node.ip))
示例14: connect_volume
# 需要导入模块: from ovs.extensions.generic.sshclient import SSHClient [as 别名]
# 或者: from ovs.extensions.generic.sshclient.SSHClient import dir_create [as 别名]
def connect_volume(vpool, name, loop_device, root_client=None):
"""
Connect/mount a volume to loop device
:param vpool: vPool to create a volume for
:param name: Name of the volume
:param loop_device: Loop device to use to mount volume on
:param root_client: SSHClient object
:return: None
"""
location = GeneralVDisk.get_filesystem_location(vpool=vpool,
vdisk_name=name)
if root_client is None:
root_client = SSHClient('127.0.0.1', username='root')
try:
if loop_device is not None:
root_client.dir_create('/mnt/{0}'.format(loop_device))
root_client.run(['mount', '-o', 'loop', location, '/mnt/' + loop_device])
except CalledProcessError as cpe:
GeneralVDisk.logger.error(str(cpe))
root_client.run('umount /mnt/{0}'.format(loop_device), allow_nonzero=True, allow_insecure=True)
root_client.run('rmdir /mnt/{0}'.format(loop_device), allow_nonzero=True, allow_insecure=True)
示例15: create_cluster
# 需要导入模块: from ovs.extensions.generic.sshclient import SSHClient [as 别名]
# 或者: from ovs.extensions.generic.sshclient.SSHClient import dir_create [as 别名]
def create_cluster(cluster_name, ip):
"""
Creates a cluster
:param base_dir: Base directory that should contain the data
:param ip: IP address of the first node of the new cluster
:param cluster_name: Name of the cluster
"""
logger.debug('Creating cluster "{0}" on {1}'.format(cluster_name, ip))
client = SSHClient(ip, username='root')
node_name = System.get_my_machine_id(client)
data_dir = EtcdInstaller.DATA_DIR.format(EtcdInstaller.DB_DIR, cluster_name)
wal_dir = EtcdInstaller.WAL_DIR.format(EtcdInstaller.DB_DIR, cluster_name)
abs_paths = [data_dir, wal_dir]
client.dir_delete(abs_paths)
client.dir_create(abs_paths)
client.dir_chmod(abs_paths, 0755, recursive=True)
client.dir_chown(abs_paths, 'ovs', 'ovs', recursive=True)
base_name = 'ovs-etcd'
target_name = 'ovs-etcd-{0}'.format(cluster_name)
ServiceManager.add_service(base_name, client,
params={'CLUSTER': cluster_name,
'NODE_ID': node_name,
'DATA_DIR': data_dir,
'WAL_DIR': wal_dir,
'SERVER_URL': EtcdInstaller.SERVER_URL.format(ip),
'CLIENT_URL': EtcdInstaller.CLIENT_URL.format(ip),
'LOCAL_CLIENT_URL': EtcdInstaller.CLIENT_URL.format('127.0.0.1'),
'INITIAL_CLUSTER': '{0}={1}'.format(node_name, EtcdInstaller.SERVER_URL.format(ip)),
'INITIAL_STATE': 'new',
'INITIAL_PEERS': '-initial-advertise-peer-urls {0}'.format(EtcdInstaller.SERVER_URL.format(ip))},
target_name=target_name)
EtcdInstaller.start(cluster_name, client)
EtcdInstaller.wait_for_cluster(cluster_name, client)
logger.debug('Creating cluster "{0}" on {1} completed'.format(cluster_name, ip))