diff --git a/hooks/charmhelpers/contrib/network/ip.py b/hooks/charmhelpers/contrib/network/ip.py index 4d472cad..14602661 100644 --- a/hooks/charmhelpers/contrib/network/ip.py +++ b/hooks/charmhelpers/contrib/network/ip.py @@ -469,9 +469,21 @@ def ns_query(address): return None try: - answers = dns.resolver.query(address, rtype) + resolv = dns.resolver.Resolver() + # The dnspython library sets a default DNS query lifetime of 5.0 seconds, + # as defined in BaseResolver.reset() (see https://github.com/rthalley/ + # dnspython/blob/7ed1648b/dns/resolver.py#L709, commit 7ed1648b). + resolv.lifetime = config('dns-query-timeout') or 5.0 + if hasattr(resolv, 'resolve'): + answers = resolv.resolve(address, rtype) + else: + answers = resolv.query(address, rtype) except (dns.resolver.NXDOMAIN, dns.resolver.NoNameservers): return None + except dns.exception.Timeout: + log("DNS query timed out for address {} with rtype {} and timeout " + "{}".format(address, rtype, resolv.lifetime), level=WARNING) + return None if answers: return str(answers[0]) @@ -620,7 +632,7 @@ def get_relation_ip(interface, cidr_network=None): # Currently IPv6 has priority, eventually we want IPv6 to just be # another network space. assert_charm_supports_ipv6() - return get_ipv6_addr()[0] + return get_ipv6_addr(dynamic_only=False)[0] elif cidr_network: # If a specific CIDR network is passed get the address from that # network. diff --git a/hooks/charmhelpers/contrib/openstack/context.py b/hooks/charmhelpers/contrib/openstack/context.py index cd70b55c..9082348b 100644 --- a/hooks/charmhelpers/contrib/openstack/context.py +++ b/hooks/charmhelpers/contrib/openstack/context.py @@ -25,7 +25,10 @@ import socket import time from base64 import b64decode -from distutils.version import LooseVersion +try: + from distutils.version import LooseVersion +except ImportError: + from looseversion import LooseVersion from subprocess import ( check_call, check_output, diff --git a/hooks/charmhelpers/contrib/openstack/utils.py b/hooks/charmhelpers/contrib/openstack/utils.py index ac52d797..79e1e7b5 100644 --- a/hooks/charmhelpers/contrib/openstack/utils.py +++ b/hooks/charmhelpers/contrib/openstack/utils.py @@ -164,6 +164,8 @@ OPENSTACK_CODENAMES = OrderedDict([ ('2024.1', 'caracal'), ('2024.2', 'dalmatian'), ('2025.1', 'epoxy'), + ('2025.2', 'flamingo'), + ('2026.1', 'gazpacho'), ]) # The ugly duckling - must list releases oldest to newest diff --git a/hooks/charmhelpers/fetch/ubuntu.py b/hooks/charmhelpers/fetch/ubuntu.py index 0b2f229d..57a84cd3 100644 --- a/hooks/charmhelpers/fetch/ubuntu.py +++ b/hooks/charmhelpers/fetch/ubuntu.py @@ -270,6 +270,22 @@ CLOUD_ARCHIVE_POCKETS = { 'epoxy/proposed': 'noble-proposed/epoxy', 'noble-epoxy/proposed': 'noble-proposed/epoxy', 'noble-proposed/epoxy': 'noble-proposed/epoxy', + # flamingo + 'flamingo': 'noble-updates/flamingo', + 'noble-flamingo': 'noble-updates/flamingo', + 'noble-flamingo/updates': 'noble-updates/flamingo', + 'noble-updates/flamingo': 'noble-updates/flamingo', + 'flamingo/proposed': 'noble-proposed/flamingo', + 'noble-flamingo/proposed': 'noble-proposed/flamingo', + 'noble-proposed/flamingo': 'noble-proposed/flamingo', + # gazpacho + 'gazpacho': 'noble-updates/gazpacho', + 'noble-gazpacho': 'noble-updates/gazpacho', + 'noble-gazpacho/updates': 'noble-updates/gazpacho', + 'noble-updates/gazpacho': 'noble-updates/gazpacho', + 'gazpacho/proposed': 'noble-proposed/gazpacho', + 'noble-gazpacho/proposed': 'noble-proposed/gazpacho', + 'noble-proposed/gazpacho': 'noble-proposed/gazpacho', # OVN 'focal-ovn-22.03': 'focal-updates/ovn-22.03', @@ -306,6 +322,8 @@ OPENSTACK_RELEASES = ( 'caracal', 'dalmatian', 'epoxy', + 'flamingo', + 'gazpacho', ) @@ -338,6 +356,8 @@ UBUNTU_OPENSTACK_RELEASE = OrderedDict([ ('noble', 'caracal'), ('oracular', 'dalmatian'), ('plucky', 'epoxy'), + ('questing', 'flamingo'), + ('resolute', 'gazpacho'), ])