diff options
| -rw-r--r-- | cloudinit/sources/__init__.py | 42 | 
1 files changed, 25 insertions, 17 deletions
| diff --git a/cloudinit/sources/__init__.py b/cloudinit/sources/__init__.py index e2a9150d..9a9c1316 100644 --- a/cloudinit/sources/__init__.py +++ b/cloudinit/sources/__init__.py @@ -18,13 +18,16 @@  #    You should have received a copy of the GNU General Public License  #    along with this program.  If not, see <http://www.gnu.org/licenses/>. +from cloudinit import user_data as ud +from cloudinit import util + +import socket  DEP_FILESYSTEM = "FILESYSTEM"  DEP_NETWORK = "NETWORK" -import cloudinit.UserDataHandler as ud -import cloudinit.util as util -import socket +class DataSourceNotFoundException(Exception): +    pass  class DataSource: @@ -152,6 +155,25 @@ class DataSource:              return hostname +def find_source(cfg, ds_deps): +    cfglist = cfg.get('datasource_list') or [] +    dslist = list_sources(cfglist, ds_deps) +    dsnames = [f.__name__ for f in dslist] +     +    LOG.debug("Searching for data source in %s", dsnames) +    for cls in dslist: +        ds = cls.__name__ +        try: +            s = cls(sys_cfg=cfg) +            if s.get_data(): +                return (s, ds) +        except Exception as e: +            LOG.exception("Getting data from %s raised %s", ds, e) + +    msg = "Did not find any data source, searched classes: %s" % dsnames +    raise DataSourceNotFoundException(msg) + +  # return a list of classes that have the same depends as 'depends'  # iterate through cfg_list, loading "DataSourceCollections" modules  # and calling their "get_datasource_list". @@ -198,17 +220,3 @@ def list_from_depends(depends, dslist):          if depset == set(deps):              retlist.append(cls)      return(retlist) - - -def is_ipv4(instr): -    """ determine if input string is a ipv4 address. return boolean""" -    toks = instr.split('.') -    if len(toks) != 4: -        return False - -    try: -        toks = [x for x in toks if (int(x) < 256 and int(x) > 0)] -    except: -        return False - -    return (len(toks) == 4) | 
