9c12812735
Some major changes: * the charm has been rebased (from a Python perspective) to be rooted in the charm directory. This is a single root. * Imports have been changed so that the don't add lots of imports to the namespace of the module doing the import. * The code that used to run at module import time has been made lazy such that it only has to run if the relevant functions are called. This includes restart_on_change parameters, the harden function and the parameters to the guard_map. Appropriate changes will be submitted to charm-helpers. * Several tests had to be re-written as (incorrect) mocking meant that text fixtures didn't actually match what the code was doing. Thus, the tests were meaningless. * This has had a net positive impact on the unit tests wrt to importing modules and mocking. Change-Id: Id07d9d1caaa9b29453a63c2e49ba831071e9457f
73 lines
1.9 KiB
Python
73 lines
1.9 KiB
Python
import subprocess
|
|
import yum
|
|
import os
|
|
|
|
from charmhelpers.core.strutils import BasicStringComparator
|
|
|
|
|
|
class CompareHostReleases(BasicStringComparator):
|
|
"""Provide comparisons of Host releases.
|
|
|
|
Use in the form of
|
|
|
|
if CompareHostReleases(release) > 'trusty':
|
|
# do something with mitaka
|
|
"""
|
|
|
|
def __init__(self, item):
|
|
raise NotImplementedError(
|
|
"CompareHostReleases() is not implemented for CentOS")
|
|
|
|
|
|
def service_available(service_name):
|
|
# """Determine whether a system service is available."""
|
|
if os.path.isdir('/run/systemd/system'):
|
|
cmd = ['systemctl', 'is-enabled', service_name]
|
|
else:
|
|
cmd = ['service', service_name, 'is-enabled']
|
|
return subprocess.call(cmd) == 0
|
|
|
|
|
|
def add_new_group(group_name, system_group=False, gid=None):
|
|
cmd = ['groupadd']
|
|
if gid:
|
|
cmd.extend(['--gid', str(gid)])
|
|
if system_group:
|
|
cmd.append('-r')
|
|
cmd.append(group_name)
|
|
subprocess.check_call(cmd)
|
|
|
|
|
|
def lsb_release():
|
|
"""Return /etc/os-release in a dict."""
|
|
d = {}
|
|
with open('/etc/os-release', 'r') as lsb:
|
|
for l in lsb:
|
|
s = l.split('=')
|
|
if len(s) != 2:
|
|
continue
|
|
d[s[0].strip()] = s[1].strip()
|
|
return d
|
|
|
|
|
|
def cmp_pkgrevno(package, revno, pkgcache=None):
|
|
"""Compare supplied revno with the revno of the installed package.
|
|
|
|
* 1 => Installed revno is greater than supplied arg
|
|
* 0 => Installed revno is the same as supplied arg
|
|
* -1 => Installed revno is less than supplied arg
|
|
|
|
This function imports YumBase function if the pkgcache argument
|
|
is None.
|
|
"""
|
|
if not pkgcache:
|
|
y = yum.YumBase()
|
|
packages = y.doPackageLists()
|
|
pkgcache = {i.Name: i.version for i in packages['installed']}
|
|
pkg = pkgcache[package]
|
|
if pkg > revno:
|
|
return 1
|
|
if pkg < revno:
|
|
return -1
|
|
return 0
|