~freyes/charms/trusty/nova-cloud-controller/single-nova-consoleauth

« back to all changes in this revision

Viewing changes to hooks/charmhelpers/contrib/openstack/utils.py

  • Committer: Felipe Reyes
  • Date: 2015-03-06 15:45:22 UTC
  • mfrom: (140.1.3 nova-cloud-controller)
  • Revision ID: felipe.reyes@canonical.com-20150306154522-z00f5lfyyekd9pi8
Commit after merge

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
import subprocess
24
24
import json
25
25
import os
26
 
import socket
27
26
import sys
28
27
 
29
28
import six
30
29
import yaml
31
30
 
 
31
from charmhelpers.contrib.network import ip
 
32
 
32
33
from charmhelpers.core.hookenv import (
33
34
    config,
34
35
    log as juju_log,
103
104
    ('2.1.0', 'juno'),
104
105
    ('2.2.0', 'juno'),
105
106
    ('2.2.1', 'kilo'),
 
107
    ('2.2.2', 'kilo'),
106
108
])
107
109
 
108
110
DEFAULT_LOOPBACK_SIZE = '5G'
420
422
    else:
421
423
        zap_disk(block_device)
422
424
 
423
 
 
424
 
def is_ip(address):
425
 
    """
426
 
    Returns True if address is a valid IP address.
427
 
    """
428
 
    try:
429
 
        # Test to see if already an IPv4 address
430
 
        socket.inet_aton(address)
431
 
        return True
432
 
    except socket.error:
433
 
        return False
434
 
 
435
 
 
436
 
def ns_query(address):
437
 
    try:
438
 
        import dns.resolver
439
 
    except ImportError:
440
 
        apt_install('python-dnspython')
441
 
        import dns.resolver
442
 
 
443
 
    if isinstance(address, dns.name.Name):
444
 
        rtype = 'PTR'
445
 
    elif isinstance(address, six.string_types):
446
 
        rtype = 'A'
447
 
    else:
448
 
        return None
449
 
 
450
 
    answers = dns.resolver.query(address, rtype)
451
 
    if answers:
452
 
        return str(answers[0])
453
 
    return None
454
 
 
455
 
 
456
 
def get_host_ip(hostname):
457
 
    """
458
 
    Resolves the IP for a given hostname, or returns
459
 
    the input if it is already an IP.
460
 
    """
461
 
    if is_ip(hostname):
462
 
        return hostname
463
 
 
464
 
    return ns_query(hostname)
465
 
 
466
 
 
467
 
def get_hostname(address, fqdn=True):
468
 
    """
469
 
    Resolves hostname for given IP, or returns the input
470
 
    if it is already a hostname.
471
 
    """
472
 
    if is_ip(address):
473
 
        try:
474
 
            import dns.reversename
475
 
        except ImportError:
476
 
            apt_install('python-dnspython')
477
 
            import dns.reversename
478
 
 
479
 
        rev = dns.reversename.from_address(address)
480
 
        result = ns_query(rev)
481
 
        if not result:
482
 
            return None
483
 
    else:
484
 
        result = address
485
 
 
486
 
    if fqdn:
487
 
        # strip trailing .
488
 
        if result.endswith('.'):
489
 
            return result[:-1]
490
 
        else:
491
 
            return result
492
 
    else:
493
 
        return result.split('.')[0]
 
425
is_ip = ip.is_ip
 
426
ns_query = ip.ns_query
 
427
get_host_ip = ip.get_host_ip
 
428
get_hostname = ip.get_hostname
494
429
 
495
430
 
496
431
def get_matchmaker_map(mm_file='/etc/oslo/matchmaker_ring.json'):