Add a 'none' datasource as a last resort fallback

1. This will allow a basically empty datasource to be
   activated (as the last datasource) when no other
   datasources work. This allows modules to still
   run (if they can, new function added to the datasource
   if modules want to check if cloud-init is in this
   'disconnected' state).
This commit is contained in:
Joshua Harlow 2012-08-19 22:28:14 -07:00
parent 7a6334e4bc
commit 24b7cd50d2
3 changed files with 66 additions and 1 deletions

View File

@ -35,7 +35,9 @@ CFG_BUILTIN = {
'OVF',
'MAAS',
'Ec2',
'CloudStack'
'CloudStack',
# At the end to act as a 'catch' when none of the above work...
'None',
],
'def_log_file': '/var/log/cloud-init.log',
'log_cfgs': [],

View File

@ -0,0 +1,59 @@
# vi: ts=4 expandtab
#
# Copyright (C) 2012 Yahoo! Inc.
#
# Author: Joshua Harlow <harlowja@yahoo-inc.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 3, as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# 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 log as logging
from cloudinit import sources
from cloudinit import util
LOG = logging.getLogger(__name__)
NONE_IID = 'iid-datasource-none'
class DataSourceNone(sources.DataSource):
def __init__(self, sys_cfg, distro, paths, ud_proc=None):
sources.DataSource.__init__(self, sys_cfg, distro, paths, ud_proc)
self.userdata = {}
self.metadata = {}
self.userdata_raw = ''
def get_data(self):
return True
def get_instance_id(self):
return NONE_IID
def __str__(self):
return util.obj_name(self)
@property
def is_disconnected(self):
return True
# Used to match classes to dependencies (this will always match)
datasources = [
(DataSourceNone, (sources.DEP_FILESYSTEM, sources.DEP_NETWORK)),
(DataSourceNone, (sources.DEP_FILESYSTEM,)),
(DataSourceNone, []),
]
# Return a list of data sources that match this set of dependencies
def get_datasource_list(depends):
return sources.list_from_depends(depends, datasources)

View File

@ -65,6 +65,10 @@ class DataSource(object):
self.userdata = self.ud_proc.process(raw_data)
return self.userdata
@property
def is_disconnected(self):
return False
def get_userdata_raw(self):
return self.userdata_raw