sahara/sahara/plugins/cdh/commands.py

117 lines
3.4 KiB
Python

# Copyright (c) 2014 Mirantis Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with 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.
from sahara.i18n import _
from sahara.plugins import exceptions as ex
def _root(remote, cmd, **kwargs):
return remote.execute_command(cmd, run_as_root=True, **kwargs)
def _get_os_distrib(remote):
return remote.execute_command('lsb_release -is')[1].strip().lower()
def is_centos_os(remote):
return _get_os_distrib(remote) == 'centos'
def is_ubuntu_os(remote):
return _get_os_distrib(remote) == 'ubuntu'
def is_pre_installed_cdh(remote):
code, out = remote.execute_command('ls /etc/init.d/cloudera-scm-server',
raise_when_error=False)
return code == 0
def start_cloudera_db(remote):
_root(remote, 'service cloudera-scm-server-db start')
# for Hive access
hive_access_param = 'host metastore hive 0.0.0.0/0 md5'
remote.append_to_file('/var/lib/cloudera-scm-server-db/data/pg_hba.conf',
hive_access_param, run_as_root=True)
_root(remote, 'service cloudera-scm-server-db restart')
def start_manager(remote):
_root(remote, 'service cloudera-scm-server start')
def configure_agent(remote, manager_address):
remote.replace_remote_string('/etc/cloudera-scm-agent/config.ini',
'server_host=.*',
'server_host=%s' % manager_address)
def start_agent(remote):
_root(remote, 'service cloudera-scm-agent start')
def install_packages(remote, packages, timeout=1800):
distrib = _get_os_distrib(remote)
if distrib == 'ubuntu':
cmd = 'RUNLEVEL=1 apt-get install -y %s'
elif distrib == 'centos':
cmd = 'yum install %s'
else:
raise ex.HadoopProvisionError(
_("OS on image is not supported by CDH plugin"))
cmd = cmd % ' '.join(packages)
_root(remote, cmd, timeout=timeout)
def update_repository(remote):
if is_ubuntu_os(remote):
_root(remote, 'apt-get update')
if is_centos_os(remote):
_root(remote, 'yum clean all')
def push_remote_file(remote, src, dst):
cmd = 'curl %s -o %s' % (src, dst)
_root(remote, cmd)
def add_ubuntu_repository(r, repo_list_url, repo_name):
push_remote_file(r, repo_list_url,
'/etc/apt/sources.list.d/%s.list' % repo_name)
def write_ubuntu_repository(r, repo_content, repo_name):
r.write_file_to('/etc/apt/sources.list.d/%s.list' % repo_name,
repo_content, run_as_root=True)
def add_apt_key(remote, key_url):
cmd = 'wget -qO - %s | apt-key add -' % key_url
_root(remote, cmd)
def add_centos_repository(r, repo_list_url, repo_name):
push_remote_file(r, repo_list_url, '/etc/yum.repos.d/%s.repo' % repo_name)
def write_centos_repository(r, repo_content, repo_name):
r.write_file_to('/etc/yum.repos.d/%s.repo' % repo_name,
repo_content, run_as_root=True)
def start_mysql_server(remote):
_root(remote, 'service mysql start')