diff options
Diffstat (limited to 'cloudinit/sources')
-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) |