~le-charmers/charms/trusty/hacluster/leadership-election

« back to all changes in this revision

Viewing changes to hooks/charmhelpers/core/hookenv.py

  • Committer: james.page at ubuntu
  • Date: 2015-03-10 15:26:02 UTC
  • Revision ID: james.page@ubuntu.com-20150310152602-5u0uauklpo3eqckv
Resync helpers

Show diffs side-by-side

added added

removed removed

Lines of Context:
568
568
    return os.environ.get('CHARM_DIR')
569
569
 
570
570
 
 
571
def translate_exc(from_exc, to_exc):
 
572
    def inner_translate_exc1(f):
 
573
        def inner_translate_exc2(*args, **kwargs):
 
574
            try:
 
575
                return f(*args, **kwargs)
 
576
            except from_exc:
 
577
                raise to_exc
 
578
 
 
579
        return inner_translate_exc2
 
580
 
 
581
    return inner_translate_exc1
 
582
 
 
583
 
 
584
@translate_exc(from_exc=OSError, to_exc=NotImplementedError)
571
585
def is_leader():
572
586
    """Does the current unit hold the juju leadership
573
587
 
580
594
        return (leader is True)
581
595
    except ValueError:
582
596
        raise NotImplementedError
583
 
    except CalledProcessError:
584
 
        raise NotImplementedError
 
597
 
 
598
 
 
599
@translate_exc(from_exc=OSError, to_exc=NotImplementedError)
 
600
def leader_get(attribute=None):
 
601
    """Juju leader get value(s)"""
 
602
    cmd = ['leader-get', '--format=json'] + [attribute or '-']
 
603
    try:
 
604
        ret = json.loads(subprocess.check_output(cmd).decode('UTF-8'))
 
605
        log("Juju leader-get '%s' = '%s'" % (attribute, ret), level=DEBUG)
 
606
        return ret
 
607
    except ValueError:
 
608
        return None
 
609
    except CalledProcessError as e:
 
610
        if e.returncode == 2:
 
611
            return None
 
612
 
 
613
        raise
 
614
 
 
615
 
 
616
@translate_exc(from_exc=OSError, to_exc=NotImplementedError)
 
617
def leader_set(settings=None, **kwargs):
 
618
    """Juju leader set value(s)"""
 
619
    log("Juju leader-set '%s'" % (settings), level=DEBUG)
 
620
    cmd = ['leader-set']
 
621
    settings = settings or {}
 
622
    settings.update(kwargs)
 
623
    for k, v in settings.iteritems():
 
624
        if v is None:
 
625
            cmd.append('{}='.format(k))
 
626
        else:
 
627
            cmd.append('{}={}'.format(k, v))
 
628
 
 
629
    subprocess.check_call(cmd)