a6df0c1dfc
Implements: blueprint mapr-refactor Change-Id: Ib4385845a00aab2506dddccb9e6a6f3297a5622d
82 lines
2.1 KiB
Python
82 lines
2.1 KiB
Python
# Copyright (c) 2015, MapR Technologies
|
|
#
|
|
# 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.
|
|
|
|
|
|
class Distro(object):
|
|
def __init__(self, name, install_cmd, version_separator):
|
|
self._name = name
|
|
self._install_command = install_cmd
|
|
self._version_separator = version_separator
|
|
|
|
@property
|
|
def name(self):
|
|
return self._name
|
|
|
|
@property
|
|
def install_command(self):
|
|
return self._install_command
|
|
|
|
@property
|
|
def version_separator(self):
|
|
return self._version_separator
|
|
|
|
def create_install_cmd(self, packages):
|
|
s = self.version_separator
|
|
|
|
def join_package_version(pv_item):
|
|
p, v = pv_item if len(pv_item) > 1 else (pv_item[0], None)
|
|
return p + s + v + '*' if v else p
|
|
|
|
packages = ' '.join(map(join_package_version, packages))
|
|
command = '%(install_cmd)s %(packages)s'
|
|
args = {'install_cmd': self.install_command, 'packages': packages}
|
|
return command % args
|
|
|
|
|
|
UBUNTU = Distro(
|
|
name='Ubuntu',
|
|
install_cmd='apt-get install --force-yes -y',
|
|
version_separator='=',
|
|
)
|
|
|
|
CENTOS = Distro(
|
|
name='CentOS',
|
|
install_cmd='yum install -y',
|
|
version_separator='-',
|
|
)
|
|
|
|
RHEL = Distro(
|
|
name='RedHatEnterpriseServer',
|
|
install_cmd='yum install -y',
|
|
version_separator='-',
|
|
)
|
|
|
|
SUSE = Distro(
|
|
name='Suse',
|
|
install_cmd='zypper',
|
|
version_separator=':',
|
|
)
|
|
|
|
|
|
def get_all():
|
|
return [UBUNTU, CENTOS, RHEL, SUSE]
|
|
|
|
|
|
def get(instance):
|
|
with instance.remote() as r:
|
|
name = r.execute_command('cat /etc/*-release', run_as_root=True)[1]
|
|
for d in get_all():
|
|
if d.name in name:
|
|
return d
|