~gnuoy/charms/trusty/rabbitmq-server/ssl-only

« back to all changes in this revision

Viewing changes to hooks/rabbit_utils.py

  • Committer: james.page at ubuntu
  • Date: 2015-06-09 09:59:57 UTC
  • mfrom: (83.1.20 rabbitmq-server)
  • Revision ID: james.page@ubuntu.com-20150609095957-u4ev66z3f7gzhxe3
Add support for leader-election

Show diffs side-by-side

added added

removed removed

Lines of Context:
51
51
HOSTS_FILE = '/etc/hosts'
52
52
 
53
53
_named_passwd = '/var/lib/charm/{}/{}.passwd'
 
54
_local_named_passwd = '/var/lib/charm/{}/{}.local_passwd'
 
55
 
54
56
 
55
57
# hook_contexts are used as a convenient mechanism to render templates
56
58
# logically, consider building a hook_context for template rendering so
460
462
    return (stdout, stderr, rc)
461
463
 
462
464
 
463
 
def get_rabbit_password_on_disk(username, password=None):
 
465
def get_rabbit_password_on_disk(username, password=None, local=False):
464
466
    ''' Retrieve, generate or store a rabbit password for
465
467
    the provided username on disk'''
466
 
    _passwd_file = _named_passwd.format(service_name(), username)
 
468
    if local:
 
469
        _passwd_file = _local_named_passwd.format(service_name(), username)
 
470
    else:
 
471
        _passwd_file = _named_passwd.format(service_name(), username)
 
472
 
467
473
    _password = None
468
474
    if os.path.exists(_passwd_file):
469
475
        with open(_passwd_file, 'r') as passwd:
475
481
        _password = password or pwgen(length=64)
476
482
        write_file(_passwd_file, _password, owner=RABBIT_USER,
477
483
                   group=RABBIT_USER, perms=0o660)
 
484
 
478
485
    return _password
479
486
 
480
487
 
492
499
            pass
493
500
 
494
501
 
495
 
def get_rabbit_password(username, password=None):
 
502
def get_rabbit_password(username, password=None, local=False):
496
503
    ''' Retrieve, generate or store a rabbit password for
497
504
    the provided username using peer relation cluster'''
498
 
    migrate_passwords_to_peer_relation()
499
 
    _key = '{}.passwd'.format(username)
500
 
    try:
501
 
        _password = peer_retrieve(_key)
502
 
        if _password is None:
503
 
            _password = password or pwgen(length=64)
504
 
            peer_store(_key, _password)
505
 
    except ValueError:
506
 
        # cluster relation is not yet started, use on-disk
507
 
        _password = get_rabbit_password_on_disk(username, password)
508
 
    return _password
 
505
    if local:
 
506
        return get_rabbit_password_on_disk(username, password, local)
 
507
    else:
 
508
        migrate_passwords_to_peer_relation()
 
509
        _key = '{}.passwd'.format(username)
 
510
        try:
 
511
            _password = peer_retrieve(_key)
 
512
            if _password is None:
 
513
                _password = password or pwgen(length=64)
 
514
                peer_store(_key, _password)
 
515
        except ValueError:
 
516
            # cluster relation is not yet started, use on-disk
 
517
            _password = get_rabbit_password_on_disk(username, password)
 
518
        return _password
509
519
 
510
520
 
511
521
def bind_ipv6_interface():