summaryrefslogtreecommitdiff
path: root/cloudinit/CloudConfig
diff options
context:
space:
mode:
Diffstat (limited to 'cloudinit/CloudConfig')
-rw-r--r--cloudinit/CloudConfig/__init__.py34
-rw-r--r--cloudinit/CloudConfig/cc_apt_update_upgrade.py46
-rw-r--r--cloudinit/CloudConfig/cc_bootcmd.py6
-rw-r--r--cloudinit/CloudConfig/cc_byobu.py11
-rw-r--r--cloudinit/CloudConfig/cc_chef.py18
-rw-r--r--cloudinit/CloudConfig/cc_disable_ec2_metadata.py1
-rw-r--r--cloudinit/CloudConfig/cc_final_message.py4
-rw-r--r--cloudinit/CloudConfig/cc_foo.py1
-rw-r--r--cloudinit/CloudConfig/cc_grub_dpkg.py10
-rw-r--r--cloudinit/CloudConfig/cc_keys_to_console.py3
-rw-r--r--cloudinit/CloudConfig/cc_landscape.py6
-rw-r--r--cloudinit/CloudConfig/cc_locale.py4
-rw-r--r--cloudinit/CloudConfig/cc_mcollective.py8
-rw-r--r--cloudinit/CloudConfig/cc_mounts.py28
-rw-r--r--cloudinit/CloudConfig/cc_phone_home.py23
-rw-r--r--cloudinit/CloudConfig/cc_puppet.py6
-rw-r--r--cloudinit/CloudConfig/cc_resizefs.py13
-rw-r--r--cloudinit/CloudConfig/cc_rightscale_userdata.py9
-rw-r--r--cloudinit/CloudConfig/cc_rsyslog.py9
-rw-r--r--cloudinit/CloudConfig/cc_runcmd.py3
-rw-r--r--cloudinit/CloudConfig/cc_scripts_per_boot.py1
-rw-r--r--cloudinit/CloudConfig/cc_scripts_per_instance.py1
-rw-r--r--cloudinit/CloudConfig/cc_scripts_per_once.py1
-rw-r--r--cloudinit/CloudConfig/cc_scripts_user.py1
-rw-r--r--cloudinit/CloudConfig/cc_set_hostname.py4
-rw-r--r--cloudinit/CloudConfig/cc_set_passwords.py25
-rw-r--r--cloudinit/CloudConfig/cc_ssh.py30
-rw-r--r--cloudinit/CloudConfig/cc_ssh_import_id.py9
-rw-r--r--cloudinit/CloudConfig/cc_timezone.py5
-rw-r--r--cloudinit/CloudConfig/cc_update_etc_hosts.py8
-rw-r--r--cloudinit/CloudConfig/cc_update_hostname.py12
31 files changed, 195 insertions, 145 deletions
diff --git a/cloudinit/CloudConfig/__init__.py b/cloudinit/CloudConfig/__init__.py
index 76cafebd..c9acfbf9 100644
--- a/cloudinit/CloudConfig/__init__.py
+++ b/cloudinit/CloudConfig/__init__.py
@@ -29,6 +29,7 @@ per_instance = cloudinit.per_instance
per_always = cloudinit.per_always
per_once = cloudinit.per_once
+
class CloudConfig():
cfgfile = None
cfg = None
@@ -51,12 +52,12 @@ class CloudConfig():
cloudinit.log.debug(traceback.format_exc() + "\n")
cfg = None
if cfg is None:
- cfg = { }
+ cfg = {}
try:
ds_cfg = self.cloud.datasource.get_config_obj()
except:
- ds_cfg = { }
+ ds_cfg = {}
cfg = util.mergedict(cfg, ds_cfg)
return(util.mergedict(cfg, self.cloud.cfg))
@@ -71,10 +72,11 @@ class CloudConfig():
freq = def_freq
self.cloud.sem_and_run("config-" + name, freq, handler,
- [ name, self.cfg, self.cloud, cloudinit.log, args ])
+ [name, self.cfg, self.cloud, cloudinit.log, args])
except:
raise
+
# reads a cloudconfig module list, returns
# a 2 dimensional array suitable to pass to run_cc_modules
def read_cc_modules(cfg, name):
@@ -93,13 +95,14 @@ def read_cc_modules(cfg, name):
else:
raise TypeError("failed to read '%s' item in config")
return(module_list)
-
+
+
def run_cc_modules(cc, module_list, log):
failures = []
for cfg_mod in module_list:
name = cfg_mod[0]
freq = None
- run_args = [ ]
+ run_args = []
if len(cfg_mod) > 1:
freq = cfg_mod[1]
if len(cfg_mod) > 2:
@@ -107,7 +110,7 @@ def run_cc_modules(cc, module_list, log):
try:
log.debug("handling %s with freq=%s and args=%s" %
- (name, freq, run_args ))
+ (name, freq, run_args))
cc.handle(name, run_args, freq=freq)
except:
log.warn(traceback.format_exc())
@@ -117,7 +120,8 @@ def run_cc_modules(cc, module_list, log):
return(failures)
-# always returns well formated values
+
+# always returns well formated values
# cfg is expected to have an entry 'output' in it, which is a dictionary
# that includes entries for 'init', 'config', 'final' or 'all'
# init: /var/log/cloud.out
@@ -128,7 +132,7 @@ def run_cc_modules(cc, module_list, log):
# this returns the specific 'mode' entry, cleanly formatted, with value
# None if if none is given
def get_output_cfg(cfg, mode="init"):
- ret = [ None, None ]
+ ret = [None, None]
if not 'output' in cfg:
return ret
@@ -144,7 +148,7 @@ def get_output_cfg(cfg, mode="init"):
# if value is a string, it specifies stdout and stderr
if isinstance(modecfg, str):
- ret = [ modecfg, modecfg ]
+ ret = [modecfg, modecfg]
# if its a list, then we expect (stdout, stderr)
if isinstance(modecfg, list):
@@ -166,7 +170,7 @@ def get_output_cfg(cfg, mode="init"):
if ret[1] == "&1":
ret[1] = ret[0]
- swlist = [ ">>", ">", "|" ]
+ swlist = [">>", ">", "|"]
for i in range(len(ret)):
if not ret[i]:
continue
@@ -179,12 +183,12 @@ def get_output_cfg(cfg, mode="init"):
break
if not found:
# default behavior is append
- val = "%s %s" % ( ">>", val.strip())
+ val = "%s %s" % (">>", val.strip())
ret[i] = val
return(ret)
-
+
# redirect_output(outfmt, errfmt, orig_out, orig_err)
# replace orig_out and orig_err with filehandles specified in outfmt or errfmt
# fmt can be:
@@ -193,7 +197,7 @@ def get_output_cfg(cfg, mode="init"):
# | program [ arg1 [ arg2 [ ... ] ] ]
#
# with a '|', arguments are passed to shell, so one level of
-# shell escape is required.
+# shell escape is required.
def redirect_output(outfmt, errfmt, o_out=sys.stdout, o_err=sys.stderr):
if outfmt:
(mode, arg) = outfmt.split(" ", 1)
@@ -231,6 +235,7 @@ def redirect_output(outfmt, errfmt, o_out=sys.stdout, o_err=sys.stderr):
os.dup2(new_fp.fileno(), o_err.fileno())
return
+
def run_per_instance(name, func, args, clear_on_fail=False):
semfile = "%s/%s" % (cloudinit.get_ipath_cur("data"), name)
if os.path.exists(semfile):
@@ -244,6 +249,7 @@ def run_per_instance(name, func, args, clear_on_fail=False):
os.unlink(semfile)
raise
+
# apt_get top level command (install, update...), and args to pass it
def apt_get(tlc, args=None):
if args is None:
@@ -255,9 +261,11 @@ def apt_get(tlc, args=None):
cmd.extend(args)
subprocess.check_call(cmd, env=e)
+
def update_package_sources():
run_per_instance("update-sources", apt_get, ("update",))
+
def install_packages(pkglist):
update_package_sources()
apt_get("install", pkglist)
diff --git a/cloudinit/CloudConfig/cc_apt_update_upgrade.py b/cloudinit/CloudConfig/cc_apt_update_upgrade.py
index dea89d25..8aaaa334 100644
--- a/cloudinit/CloudConfig/cc_apt_update_upgrade.py
+++ b/cloudinit/CloudConfig/cc_apt_update_upgrade.py
@@ -22,6 +22,7 @@ import os
import glob
import cloudinit.CloudConfig as cc
+
def handle(_name, cfg, cloud, log, _args):
update = util.get_cfg_option_bool(cfg, 'apt_update', False)
upgrade = util.get_cfg_option_bool(cfg, 'apt_upgrade', False)
@@ -39,7 +40,6 @@ def handle(_name, cfg, cloud, log, _args):
"archive.ubuntu.com/ubuntu")
rename_apt_lists(old_mir, mirror)
-
# set up proxy
proxy = cfg.get("apt_proxy", None)
proxy_filename = "/etc/apt/apt.conf.d/95cloud-init-proxy"
@@ -54,9 +54,9 @@ def handle(_name, cfg, cloud, log, _args):
os.unlink(proxy_filename)
# process 'apt_sources'
- if cfg.has_key('apt_sources'):
+ if 'apt_sources' in cfg:
errors = add_sources(cfg['apt_sources'],
- { 'MIRROR' : mirror, 'RELEASE' : release } )
+ {'MIRROR': mirror, 'RELEASE': release})
for e in errors:
log.warn("Source Error: %s\n" % ':'.join(e))
@@ -71,7 +71,7 @@ def handle(_name, cfg, cloud, log, _args):
pkglist = util.get_cfg_option_list_or_str(cfg, 'packages', [])
- errors = [ ]
+ errors = []
if update or len(pkglist) or upgrade:
try:
cc.update_package_sources()
@@ -101,6 +101,7 @@ def handle(_name, cfg, cloud, log, _args):
return(True)
+
def mirror2lists_fileprefix(mirror):
string = mirror
# take of http:// or ftp://
@@ -108,12 +109,12 @@ def mirror2lists_fileprefix(mirror):
string = string[0:-1]
pos = string.find("://")
if pos >= 0:
- string = string[pos+3:]
+ string = string[pos + 3:]
string = string.replace("/", "_")
return string
+
def rename_apt_lists(omirror, new_mirror, lists_d="/var/lib/apt/lists"):
-
oprefix = "%s/%s" % (lists_d, mirror2lists_fileprefix(omirror))
nprefix = "%s/%s" % (lists_d, mirror2lists_fileprefix(new_mirror))
if(oprefix == nprefix):
@@ -122,26 +123,31 @@ def rename_apt_lists(omirror, new_mirror, lists_d="/var/lib/apt/lists"):
for filename in glob.glob("%s_*" % oprefix):
os.rename(filename, "%s%s" % (nprefix, filename[olen:]))
+
def get_release():
stdout, _stderr = subprocess.Popen(['lsb_release', '-cs'],
stdout=subprocess.PIPE).communicate()
- return(stdout.strip())
+ return(str(stdout).strip())
+
def generate_sources_list(codename, mirror):
util.render_to_file('sources.list', '/etc/apt/sources.list', \
- { 'mirror' : mirror, 'codename' : codename })
+ {'mirror': mirror, 'codename': codename})
+
-# srclist is a list of dictionaries,
-# each entry must have: 'source'
-# may have: key, ( keyid and keyserver)
def add_sources(srclist, searchList=None):
+ """
+ add entries in /etc/apt/sources.list.d for each abbreviated
+ sources.list entry in 'srclist'. When rendering template, also
+ include the values in dictionary searchList
+ """
if searchList is None:
searchList = {}
elst = []
for ent in srclist:
- if not ent.has_key('source'):
- elst.append([ "", "missing source" ])
+ if 'source' not in ent:
+ elst.append(["", "missing source"])
continue
source = ent['source']
@@ -154,16 +160,16 @@ def add_sources(srclist, searchList=None):
source = util.render_string(source, searchList)
- if not ent.has_key('filename'):
+ if 'filename' not in ent:
ent['filename'] = 'cloud_config_sources.list'
if not ent['filename'].startswith("/"):
ent['filename'] = "%s/%s" % \
("/etc/apt/sources.list.d/", ent['filename'])
- if ( ent.has_key('keyid') and not ent.has_key('key') ):
+ if ('keyid' in ent and 'key' not in ent):
ks = "keyserver.ubuntu.com"
- if ent.has_key('keyserver'):
+ if 'keyserver' in ent:
ks = ent['keyserver']
try:
ent['key'] = util.getkeybyid(ent['keyid'], ks)
@@ -171,7 +177,7 @@ def add_sources(srclist, searchList=None):
elst.append([source, "failed to get key from %s" % ks])
continue
- if ent.has_key('key'):
+ if 'key' in ent:
try:
util.subp(('apt-key', 'add', '-'), ent['key'])
except:
@@ -199,7 +205,7 @@ def find_apt_mirror(cloud, cfg):
cfg_mirror = cfg.get("apt_mirror", None)
if cfg_mirror:
mirror = cfg["apt_mirror"]
- elif cfg.has_key("apt_mirror_search"):
+ elif "apt_mirror_search" in cfg:
mirror = util.search_for_mirror(cfg['apt_mirror_search'])
else:
if cloud:
@@ -211,7 +217,7 @@ def find_apt_mirror(cloud, cfg):
if not mirror and cloud:
# if we have a fqdn, then search its domain portion first
- ( _hostname, fqdn ) = util.get_hostname_fqdn(cfg, cloud)
+ (_hostname, fqdn) = util.get_hostname_fqdn(cfg, cloud)
mydom = ".".join(fqdn.split(".")[1:])
if mydom:
doms.append(".%s" % mydom)
@@ -220,7 +226,7 @@ def find_apt_mirror(cloud, cfg):
doms.extend((".localdomain", "",))
mirror_list = []
- mirrorfmt = "http://%s-mirror%s/%s" % (distro, "%s", distro )
+ mirrorfmt = "http://%s-mirror%s/%s" % (distro, "%s", distro)
for post in doms:
mirror_list.append(mirrorfmt % post)
diff --git a/cloudinit/CloudConfig/cc_bootcmd.py b/cloudinit/CloudConfig/cc_bootcmd.py
index 98a7a747..66c452e9 100644
--- a/cloudinit/CloudConfig/cc_bootcmd.py
+++ b/cloudinit/CloudConfig/cc_bootcmd.py
@@ -18,11 +18,13 @@
import cloudinit.util as util
import subprocess
import tempfile
+import os
from cloudinit.CloudConfig import per_always
frequency = per_always
+
def handle(_name, cfg, cloud, log, _args):
- if not cfg.has_key("bootcmd"):
+ if "bootcmd" not in cfg:
return
try:
@@ -33,7 +35,7 @@ def handle(_name, cfg, cloud, log, _args):
except:
log.warn("failed to shellify bootcmd")
raise
-
+
try:
env = os.environ.copy()
env['INSTANCE_ID'] = cloud.get_instance_id()
diff --git a/cloudinit/CloudConfig/cc_byobu.py b/cloudinit/CloudConfig/cc_byobu.py
index 04825521..7e455a7a 100644
--- a/cloudinit/CloudConfig/cc_byobu.py
+++ b/cloudinit/CloudConfig/cc_byobu.py
@@ -19,6 +19,7 @@ import cloudinit.util as util
import subprocess
import traceback
+
def handle(_name, cfg, _cloud, log, args):
if len(args) != 0:
value = args[0]
@@ -31,8 +32,8 @@ def handle(_name, cfg, _cloud, log, args):
if value == "user" or value == "system":
value = "enable-%s" % value
- valid = ( "enable-user", "enable-system", "enable",
- "disable-user", "disable-system", "disable" )
+ valid = ("enable-user", "enable-system", "enable",
+ "disable-user", "disable-system", "disable")
if not value in valid:
log.warn("Unknown value %s for byobu_by_default" % value)
@@ -59,7 +60,7 @@ def handle(_name, cfg, _cloud, log, args):
shcmd += " && dpkg-reconfigure byobu --frontend=noninteractive"
shcmd += " || X=$(($X+1)); "
- cmd = [ "/bin/sh", "-c", "%s %s %s" % ("X=0;", shcmd, "exit $X" ) ]
+ cmd = ["/bin/sh", "-c", "%s %s %s" % ("X=0;", shcmd, "exit $X")]
log.debug("setting byobu to %s" % value)
@@ -67,7 +68,7 @@ def handle(_name, cfg, _cloud, log, args):
subprocess.check_call(cmd)
except subprocess.CalledProcessError as e:
log.debug(traceback.format_exc(e))
- raise Exception("Cmd returned %s: %s" % ( e.returncode, cmd))
+ raise Exception("Cmd returned %s: %s" % (e.returncode, cmd))
except OSError as e:
log.debug(traceback.format_exc(e))
- raise Exception("Cmd failed to execute: %s" % ( cmd ))
+ raise Exception("Cmd failed to execute: %s" % (cmd))
diff --git a/cloudinit/CloudConfig/cc_chef.py b/cloudinit/CloudConfig/cc_chef.py
index 4f740aff..c9b464b5 100644
--- a/cloudinit/CloudConfig/cc_chef.py
+++ b/cloudinit/CloudConfig/cc_chef.py
@@ -23,9 +23,10 @@ import cloudinit.util as util
ruby_version_default = "1.8"
+
def handle(_name, cfg, cloud, log, _args):
# If there isn't a chef key in the configuration don't do anything
- if not cfg.has_key('chef'):
+ if 'chef' not in cfg:
return
chef_cfg = cfg['chef']
@@ -36,8 +37,7 @@ def handle(_name, cfg, cloud, log, _args):
# set the validation key based on the presence of either 'validation_key'
# or 'validation_cert'. In the case where both exist, 'validation_key'
# takes precedence
- if (chef_cfg.has_key('validation_key') or
- chef_cfg.has_key('validation_cert')):
+ if ('validation_key' in chef_cfg or 'validation_cert' in chef_cfg):
validation_key = util.get_cfg_option_str(chef_cfg, 'validation_key',
chef_cfg['validation_cert'])
with open('/etc/chef/validation.pem', 'w') as validation_key_fh:
@@ -55,9 +55,9 @@ def handle(_name, cfg, cloud, log, _args):
# set the firstboot json
with open('/etc/chef/firstboot.json', 'w') as firstboot_json_fh:
initial_json = {}
- if chef_cfg.has_key('run_list'):
+ if 'run_list' in chef_cfg:
initial_json['run_list'] = chef_cfg['run_list']
- if chef_cfg.has_key('initial_attributes'):
+ if 'initial_attributes' in chef_cfg:
initial_attributes = chef_cfg['initial_attributes']
for k in initial_attributes.keys():
initial_json[k] = initial_attributes[k]
@@ -81,14 +81,16 @@ def handle(_name, cfg, cloud, log, _args):
# this will install and run the chef-client from packages
cc.install_packages(('chef',))
+
def get_ruby_packages(version):
# return a list of packages needed to install ruby at version
- pkgs = [ 'ruby%s' % version, 'ruby%s-dev' % version ]
+ pkgs = ['ruby%s' % version, 'ruby%s-dev' % version]
if version == "1.8":
pkgs.extend(('libopenssl-ruby1.8', 'rubygems1.8'))
return(pkgs)
-def install_chef_from_gems(ruby_version, chef_version = None):
+
+def install_chef_from_gems(ruby_version, chef_version=None):
cc.install_packages(get_ruby_packages(ruby_version))
if not os.path.exists('/usr/bin/gem'):
os.symlink('/usr/bin/gem%s' % ruby_version, '/usr/bin/gem')
@@ -103,10 +105,12 @@ def install_chef_from_gems(ruby_version, chef_version = None):
'--no-ri', '--no-rdoc', '--bindir',
'/usr/bin', '-q'])
+
def ensure_dir(d):
if not os.path.exists(d):
os.makedirs(d)
+
def mkdirs(dirs):
for d in dirs:
ensure_dir(d)
diff --git a/cloudinit/CloudConfig/cc_disable_ec2_metadata.py b/cloudinit/CloudConfig/cc_disable_ec2_metadata.py
index 383e3b0c..7deec324 100644
--- a/cloudinit/CloudConfig/cc_disable_ec2_metadata.py
+++ b/cloudinit/CloudConfig/cc_disable_ec2_metadata.py
@@ -21,6 +21,7 @@ from cloudinit.CloudConfig import per_always
frequency = per_always
+
def handle(_name, cfg, _cloud, _log, _args):
if util.get_cfg_option_bool(cfg, "disable_ec2_metadata", False):
fwall = "route add -host 169.254.169.254 reject"
diff --git a/cloudinit/CloudConfig/cc_final_message.py b/cloudinit/CloudConfig/cc_final_message.py
index 7930bab5..63618fd2 100644
--- a/cloudinit/CloudConfig/cc_final_message.py
+++ b/cloudinit/CloudConfig/cc_final_message.py
@@ -24,6 +24,7 @@ frequency = per_always
final_message = "cloud-init boot finished at $TIMESTAMP. Up $UPTIME seconds"
+
def handle(_name, cfg, _cloud, log, args):
if len(args) != 0:
msg_in = args[0]
@@ -38,14 +39,13 @@ def handle(_name, cfg, _cloud, log, args):
log.warn("unable to open /proc/uptime\n")
uptime = "na"
-
try:
ts = time.strftime("%a, %d %b %Y %H:%M:%S %z", time.gmtime())
except:
ts = "na"
try:
- subs = { 'UPTIME' : uptime, 'TIMESTAMP' : ts }
+ subs = {'UPTIME': uptime, 'TIMESTAMP': ts}
sys.stdout.write("%s\n" % util.render_string(msg_in, subs))
except Exception as e:
log.warn("failed to render string to stdout: %s" % e)
diff --git a/cloudinit/CloudConfig/cc_foo.py b/cloudinit/CloudConfig/cc_foo.py
index 82a44baf..98e2d648 100644
--- a/cloudinit/CloudConfig/cc_foo.py
+++ b/cloudinit/CloudConfig/cc_foo.py
@@ -22,5 +22,6 @@ from cloudinit.CloudConfig import per_instance
frequency = per_instance
+
def handle(_name, _cfg, _cloud, _log, _args):
print "hi"
diff --git a/cloudinit/CloudConfig/cc_grub_dpkg.py b/cloudinit/CloudConfig/cc_grub_dpkg.py
index 1437d481..69cc96b9 100644
--- a/cloudinit/CloudConfig/cc_grub_dpkg.py
+++ b/cloudinit/CloudConfig/cc_grub_dpkg.py
@@ -20,8 +20,8 @@ import cloudinit.util as util
import traceback
import os
+
def handle(_name, cfg, _cloud, log, _args):
-
idevs = None
idevs_empty = None
@@ -31,8 +31,8 @@ def handle(_name, cfg, _cloud, log, _args):
idevs_empty = util.get_cfg_option_str(cfg["grub-dpkg"],
"grub-pc/install_devices_empty", None)
- if (( os.path.exists("/dev/sda1") and not os.path.exists("/dev/sda") ) or
- ( os.path.exists("/dev/xvda1") and not os.path.exists("/dev/xvda") )):
+ if ((os.path.exists("/dev/sda1") and not os.path.exists("/dev/sda")) or
+ (os.path.exists("/dev/xvda1") and not os.path.exists("/dev/xvda"))):
if idevs == None:
idevs = ""
if idevs_empty == None:
@@ -42,11 +42,11 @@ def handle(_name, cfg, _cloud, log, _args):
idevs_empty = "false"
if idevs == None:
idevs = "/dev/sda"
- for dev in ( "/dev/sda", "/dev/vda", "/dev/sda1", "/dev/vda1"):
+ for dev in ("/dev/sda", "/dev/vda", "/dev/sda1", "/dev/vda1"):
if os.path.exists(dev):
idevs = dev
break
-
+
# now idevs and idevs_empty are set to determined values
# or, those set by user
diff --git a/cloudinit/CloudConfig/cc_keys_to_console.py b/cloudinit/CloudConfig/cc_keys_to_console.py
index d462a0a8..941c49de 100644
--- a/cloudinit/CloudConfig/cc_keys_to_console.py
+++ b/cloudinit/CloudConfig/cc_keys_to_console.py
@@ -21,8 +21,9 @@ import subprocess
frequency = per_instance
+
def handle(_name, cfg, _cloud, log, _args):
- cmd = [ '/usr/lib/cloud-init/write-ssh-key-fingerprints' ]
+ cmd = ['/usr/lib/cloud-init/write-ssh-key-fingerprints']
fp_blacklist = util.get_cfg_option_list_or_str(cfg,
"ssh_fp_console_blacklist", [])
key_blacklist = util.get_cfg_option_list_or_str(cfg,
diff --git a/cloudinit/CloudConfig/cc_landscape.py b/cloudinit/CloudConfig/cc_landscape.py
index d2d2bd19..f228d2cf 100644
--- a/cloudinit/CloudConfig/cc_landscape.py
+++ b/cloudinit/CloudConfig/cc_landscape.py
@@ -23,7 +23,7 @@ frequency = per_instance
lsc_client_cfg_file = "/etc/landscape/client.conf"
# defaults taken from stock client.conf in landscape-client 11.07.1.1-0ubuntu2
-lsc_builtincfg = {
+lsc_builtincfg = {
'client': {
'log_level': "info",
'url': "https://landscape.canonical.com/message-system",
@@ -32,6 +32,7 @@ lsc_builtincfg = {
}
}
+
def handle(_name, cfg, _cloud, log, _args):
"""
Basically turn a top level 'landscape' entry with a 'client' dict
@@ -39,7 +40,7 @@ def handle(_name, cfg, _cloud, log, _args):
/etc/landscape/client.conf
"""
- ls_cloudcfg = cfg.get("landscape", { })
+ ls_cloudcfg = cfg.get("landscape", {})
if not isinstance(ls_cloudcfg, dict):
raise(Exception("'landscape' existed in config, but not a dict"))
@@ -51,6 +52,7 @@ def handle(_name, cfg, _cloud, log, _args):
log.debug("updated %s" % lsc_client_cfg_file)
+
def mergeTogether(objs):
"""
merge together ConfigObj objects or things that ConfigObj() will take in
diff --git a/cloudinit/CloudConfig/cc_locale.py b/cloudinit/CloudConfig/cc_locale.py
index 991f5861..9129ca30 100644
--- a/cloudinit/CloudConfig/cc_locale.py
+++ b/cloudinit/CloudConfig/cc_locale.py
@@ -20,13 +20,15 @@ import os.path
import subprocess
import traceback
+
def apply_locale(locale, cfgfile):
if os.path.exists('/usr/sbin/locale-gen'):
subprocess.Popen(['locale-gen', locale]).communicate()
if os.path.exists('/usr/sbin/update-locale'):
subprocess.Popen(['update-locale', locale]).communicate()
- util.render_to_file('default-locale', cfgfile, { 'locale' : locale })
+ util.render_to_file('default-locale', cfgfile, {'locale': locale})
+
def handle(_name, cfg, cloud, log, args):
if len(args) != 0:
diff --git a/cloudinit/CloudConfig/cc_mcollective.py b/cloudinit/CloudConfig/cc_mcollective.py
index 8ad8caab..2b8b2f96 100644
--- a/cloudinit/CloudConfig/cc_mcollective.py
+++ b/cloudinit/CloudConfig/cc_mcollective.py
@@ -27,11 +27,13 @@ import cloudinit.util as util
pubcert_file = "/etc/mcollective/ssl/server-public.pem"
pricert_file = "/etc/mcollective/ssl/server-private.pem"
+
# Our fake header section
class FakeSecHead(object):
def __init__(self, fp):
self.fp = fp
self.sechead = '[nullsection]\n'
+
def readline(self):
if self.sechead:
try:
@@ -41,16 +43,17 @@ class FakeSecHead(object):
else:
return self.fp.readline()
+
def handle(_name, cfg, _cloud, _log, _args):
# If there isn't a mcollective key in the configuration don't do anything
- if not cfg.has_key('mcollective'):
+ if 'mcollective' not in cfg:
return
mcollective_cfg = cfg['mcollective']
# Start by installing the mcollective package ...
cc.install_packages(("mcollective",))
# ... and then update the mcollective configuration
- if mcollective_cfg.has_key('conf'):
+ if 'conf' in mcollective_cfg:
# Create object for reading server.cfg values
mcollective_config = ConfigParser.ConfigParser()
# Read server.cfg values from original file in order to be able to mix
@@ -92,4 +95,3 @@ def handle(_name, cfg, _cloud, _log, _args):
# Start mcollective
subprocess.check_call(['service', 'mcollective', 'start'])
-
diff --git a/cloudinit/CloudConfig/cc_mounts.py b/cloudinit/CloudConfig/cc_mounts.py
index f7d8c702..dbd9c454 100644
--- a/cloudinit/CloudConfig/cc_mounts.py
+++ b/cloudinit/CloudConfig/cc_mounts.py
@@ -20,28 +20,30 @@ import os
import re
import string
+
def is_mdname(name):
# return true if this is a metadata service name
- if name in [ "ami", "root", "swap" ]:
+ if name in ["ami", "root", "swap"]:
return True
# names 'ephemeral0' or 'ephemeral1'
# 'ebs[0-9]' appears when '--block-device-mapping sdf=snap-d4d90bbc'
- for enumname in ( "ephemeral", "ebs" ):
+ for enumname in ("ephemeral", "ebs"):
if name.startswith(enumname) and name.find(":") == -1:
return True
return False
+
def handle(_name, cfg, cloud, log, _args):
# fs_spec, fs_file, fs_vfstype, fs_mntops, fs-freq, fs_passno
- defvals = [ None, None, "auto", "defaults,nobootwait", "0", "2" ]
+ defvals = [None, None, "auto", "defaults,nobootwait", "0", "2"]
defvals = cfg.get("mount_default_fields", defvals)
# these are our default set of mounts
- defmnts = [ [ "ephemeral0", "/mnt", "auto", defvals[3], "0", "2" ],
- [ "swap", "none", "swap", "sw", "0", "0" ] ]
+ defmnts = [["ephemeral0", "/mnt", "auto", defvals[3], "0", "2"],
+ ["swap", "none", "swap", "sw", "0", "0"]]
- cfgmnt = [ ]
- if cfg.has_key("mounts"):
+ cfgmnt = []
+ if "mounts" in cfg:
cfgmnt = cfg["mounts"]
# shortname matches 'sda', 'sda1', 'xvda', 'hda', 'sdb', xvdb, vda, vdd1
@@ -94,7 +96,6 @@ def handle(_name, cfg, cloud, log, _args):
if cfgmnt[j][0] == cfgmnt[i][0]:
cfgmnt[j][1] = None
-
# for each of the "default" mounts, add them only if no other
# entry has the same device name
for defmnt in defmnts:
@@ -111,12 +112,11 @@ def handle(_name, cfg, cloud, log, _args):
if cfgm[0] == defmnt[0]:
cfgmnt_has = True
break
-
+
if cfgmnt_has:
continue
cfgmnt.append(defmnt)
-
# now, each entry in the cfgmnt list has all fstab values
# if the second field is None (not the string, the value) we skip it
actlist = [x for x in cfgmnt if x[1] is not None]
@@ -125,9 +125,9 @@ def handle(_name, cfg, cloud, log, _args):
return
comment = "comment=cloudconfig"
- cc_lines = [ ]
+ cc_lines = []
needswap = False
- dirs = [ ]
+ dirs = []
for line in actlist:
# write 'comment' in the fs_mntops, entry, claiming this
line[3] = "%s,comment=cloudconfig" % line[3]
@@ -137,7 +137,7 @@ def handle(_name, cfg, cloud, log, _args):
dirs.append(line[1])
cc_lines.append('\t'.join(line))
- fstab_lines = [ ]
+ fstab_lines = []
fstab = open("/etc/fstab", "r+")
ws = re.compile("[%s]+" % string.whitespace)
for line in fstab.read().splitlines():
@@ -150,7 +150,7 @@ def handle(_name, cfg, cloud, log, _args):
fstab_lines.append(line)
fstab_lines.extend(cc_lines)
-
+
fstab.seek(0)
fstab.write("%s\n" % '\n'.join(fstab_lines))
fstab.truncate()
diff --git a/cloudinit/CloudConfig/cc_phone_home.py b/cloudinit/CloudConfig/cc_phone_home.py
index 05caf8eb..73066444 100644
--- a/cloudinit/CloudConfig/cc_phone_home.py
+++ b/cloudinit/CloudConfig/cc_phone_home.py
@@ -23,6 +23,7 @@ frequency = per_instance
post_list_all = ['pub_key_dsa', 'pub_key_rsa', 'pub_key_ecdsa', 'instance_id',
'hostname']
+
# phone_home:
# url: http://my.foo.bar/$INSTANCE/
# post: all
@@ -31,10 +32,10 @@ post_list_all = ['pub_key_dsa', 'pub_key_rsa', 'pub_key_ecdsa', 'instance_id',
# phone_home:
# url: http://my.foo.bar/$INSTANCE_ID/
# post: [ pub_key_dsa, pub_key_rsa, pub_key_ecdsa, instance_id
-#
+#
def handle(_name, cfg, cloud, log, args):
if len(args) != 0:
- ph_cfg = util.readconf(args[0])
+ ph_cfg = util.read_conf(args[0])
else:
if not 'phone_home' in cfg:
return
@@ -56,7 +57,7 @@ def handle(_name, cfg, cloud, log, args):
if post_list == "all":
post_list = post_list_all
- all_keys = { }
+ all_keys = {}
all_keys['instance_id'] = cloud.get_instance_id()
all_keys['hostname'] = cloud.get_hostname()
@@ -74,7 +75,7 @@ def handle(_name, cfg, cloud, log, args):
except:
log.warn("%s: failed to open in phone_home" % path)
- submit_keys = { }
+ submit_keys = {}
for k in post_list:
if k in all_keys:
submit_keys[k] = all_keys[k]
@@ -82,20 +83,22 @@ def handle(_name, cfg, cloud, log, args):
submit_keys[k] = "N/A"
log.warn("requested key %s from 'post' list not available")
- url = util.render_string(url, { 'INSTANCE_ID' : all_keys['instance_id'] })
+ url = util.render_string(url, {'INSTANCE_ID': all_keys['instance_id']})
- last_e = None
+ null_exc = object()
+ last_e = null_exc
for i in range(0, tries):
try:
util.readurl(url, submit_keys)
- log.debug("succeeded submit to %s on try %i" % (url, i+1))
+ log.debug("succeeded submit to %s on try %i" % (url, i + 1))
return
except Exception as e:
- log.debug("failed to post to %s on try %i" % (url, i+1))
+ log.debug("failed to post to %s on try %i" % (url, i + 1))
last_e = e
sleep(3)
log.warn("failed to post to %s in %i tries" % (url, tries))
- if last_e: raise(last_e)
-
+ if last_e is not null_exc:
+ raise(last_e)
+
return
diff --git a/cloudinit/CloudConfig/cc_puppet.py b/cloudinit/CloudConfig/cc_puppet.py
index 5fb0c1ee..6db1ed5c 100644
--- a/cloudinit/CloudConfig/cc_puppet.py
+++ b/cloudinit/CloudConfig/cc_puppet.py
@@ -25,16 +25,17 @@ import ConfigParser
import cloudinit.CloudConfig as cc
import cloudinit.util as util
+
def handle(_name, cfg, cloud, log, _args):
# If there isn't a puppet key in the configuration don't do anything
- if not cfg.has_key('puppet'):
+ if 'puppet' not in cfg:
return
puppet_cfg = cfg['puppet']
# Start by installing the puppet package ...
cc.install_packages(("puppet",))
# ... and then update the puppet configuration
- if puppet_cfg.has_key('conf'):
+ if 'conf' in puppet_cfg:
# Add all sections from the conf object to puppet.conf
puppet_conf_fh = open('/etc/puppet/puppet.conf', 'r')
# Create object for reading puppet.conf values
@@ -102,4 +103,3 @@ def handle(_name, cfg, cloud, log, _args):
log.warn("Do not know how to enable puppet service on this system")
# Start puppetd
subprocess.check_call(['service', 'puppet', 'start'])
-
diff --git a/cloudinit/CloudConfig/cc_resizefs.py b/cloudinit/CloudConfig/cc_resizefs.py
index d960afd5..f29f886d 100644
--- a/cloudinit/CloudConfig/cc_resizefs.py
+++ b/cloudinit/CloudConfig/cc_resizefs.py
@@ -25,10 +25,11 @@ from cloudinit.CloudConfig import per_always
frequency = per_always
+
def handle(_name, cfg, _cloud, log, args):
if len(args) != 0:
resize_root = False
- if str(args[0]).lower() in [ 'true', '1', 'on', 'yes']:
+ if str(args[0]).lower() in ['true', '1', 'on', 'yes']:
resize_root = True
else:
resize_root = util.get_cfg_option_bool(cfg, "resize_rootfs", True)
@@ -40,7 +41,7 @@ def handle(_name, cfg, _cloud, log, args):
(fd, devpth) = tempfile.mkstemp()
os.unlink(devpth)
os.close(fd)
-
+
try:
st_dev = os.stat("/").st_dev
dev = os.makedev(os.major(st_dev), os.minor(st_dev))
@@ -52,7 +53,7 @@ def handle(_name, cfg, _cloud, log, args):
log.warn("Failed to make device node to resize /")
raise
- cmd = [ 'blkid', '-c', '/dev/null', '-sTYPE', '-ovalue', devpth ]
+ cmd = ['blkid', '-c', '/dev/null', '-sTYPE', '-ovalue', devpth]
try:
(fstype, _err) = util.subp(cmd)
except subprocess.CalledProcessError as e:
@@ -62,13 +63,13 @@ def handle(_name, cfg, _cloud, log, args):
os.unlink(devpth)
raise
- log.debug("resizing root filesystem (type=%s, maj=%i, min=%i)" %
+ log.debug("resizing root filesystem (type=%s, maj=%i, min=%i)" %
(str(fstype).rstrip("\n"), os.major(st_dev), os.minor(st_dev)))
if str(fstype).startswith("ext"):
- resize_cmd = [ 'resize2fs', devpth ]
+ resize_cmd = ['resize2fs', devpth]
elif fstype == "xfs":
- resize_cmd = [ 'xfs_growfs', devpth ]
+ resize_cmd = ['xfs_growfs', devpth]
else:
os.unlink(devpth)
log.debug("not resizing unknown filesystem %s" % fstype)
diff --git a/cloudinit/CloudConfig/cc_rightscale_userdata.py b/cloudinit/CloudConfig/cc_rightscale_userdata.py
index 61aa89d1..d6e93aa3 100644
--- a/cloudinit/CloudConfig/cc_rightscale_userdata.py
+++ b/cloudinit/CloudConfig/cc_rightscale_userdata.py
@@ -24,9 +24,9 @@
## for cloud-init support, there will be a key named
## 'CLOUD_INIT_REMOTE_HOOK'.
##
-## This cloud-config module will
+## This cloud-config module will
## - read the blob of data from raw user data, and parse it as key/value
-## - for each key that is found, download the content to
+## - for each key that is found, download the content to
## the local instance/scripts directory and set them executable.
## - the files in that directory will be run by the user-scripts module
## Therefore, this must run before that.
@@ -42,6 +42,7 @@ frequency = per_instance
my_name = "cc_rightscale_userdata"
my_hookname = 'CLOUD_INIT_REMOTE_HOOK'
+
def handle(_name, _cfg, cloud, log, _args):
try:
ud = cloud.get_userdata_raw()
@@ -62,7 +63,7 @@ def handle(_name, _cfg, cloud, log, _args):
first_e = None
for url in mdict[my_hookname]:
fname = "%s/rightscale-%02i" % (scripts_d, i)
- i = i +1
+ i = i + 1
try:
content = util.readurl(url)
util.write_file(fname, content, mode=0700)
@@ -70,6 +71,6 @@ def handle(_name, _cfg, cloud, log, _args):
if not first_e:
first_e = None
log.warn("%s failed to read %s: %s" % (my_name, url, e))
-
+
if first_e:
raise(e)
diff --git a/cloudinit/CloudConfig/cc_rsyslog.py b/cloudinit/CloudConfig/cc_rsyslog.py
index e5f38c36..552597a5 100644
--- a/cloudinit/CloudConfig/cc_rsyslog.py
+++ b/cloudinit/CloudConfig/cc_rsyslog.py
@@ -24,6 +24,7 @@ import traceback
DEF_FILENAME = "20-cloud-config.conf"
DEF_DIR = "/etc/rsyslog.d"
+
def handle(_name, cfg, _cloud, log, _args):
# rsyslog:
# - "*.* @@192.158.1.1"
@@ -39,8 +40,8 @@ def handle(_name, cfg, _cloud, log, _args):
def_dir = cfg.get('rsyslog_dir', DEF_DIR)
def_fname = cfg.get('rsyslog_filename', DEF_FILENAME)
- files = [ ]
- elst = [ ]
+ files = []
+ elst = []
for ent in cfg['rsyslog']:
if isinstance(ent, dict):
if not "content" in ent:
@@ -70,7 +71,7 @@ def handle(_name, cfg, _cloud, log, _args):
# need to restart syslogd
restarted = False
try:
- # if this config module is running at cloud-init time
+ # if this config module is running at cloud-init time
# (before rsyslog is running) we don't actually have to
# restart syslog.
#
@@ -84,7 +85,7 @@ def handle(_name, cfg, _cloud, log, _args):
except Exception as e:
elst.append(("restart", str(e)))
-
+
if restarted:
# this only needs to run if we *actually* restarted
# syslog above.
diff --git a/cloudinit/CloudConfig/cc_runcmd.py b/cloudinit/CloudConfig/cc_runcmd.py
index 3c9baa6f..cb297568 100644
--- a/cloudinit/CloudConfig/cc_runcmd.py
+++ b/cloudinit/CloudConfig/cc_runcmd.py
@@ -18,8 +18,9 @@
import cloudinit.util as util
+
def handle(_name, cfg, cloud, log, _args):
- if not cfg.has_key("runcmd"):
+ if "runcmd" not in cfg:
return
outfile = "%s/runcmd" % cloud.get_ipath('scripts')
try:
diff --git a/cloudinit/CloudConfig/cc_scripts_per_boot.py b/cloudinit/CloudConfig/cc_scripts_per_boot.py
index ee79f0a3..2eb77c18 100644
--- a/cloudinit/CloudConfig/cc_scripts_per_boot.py
+++ b/cloudinit/CloudConfig/cc_scripts_per_boot.py
@@ -23,6 +23,7 @@ from cloudinit import get_cpath
frequency = per_always
runparts_path = "%s/%s" % (get_cpath(), "scripts/per-boot")
+
def handle(_name, _cfg, _cloud, log, _args):
try:
util.runparts(runparts_path)
diff --git a/cloudinit/CloudConfig/cc_scripts_per_instance.py b/cloudinit/CloudConfig/cc_scripts_per_instance.py
index 499829ec..0141c977 100644
--- a/cloudinit/CloudConfig/cc_scripts_per_instance.py
+++ b/cloudinit/CloudConfig/cc_scripts_per_instance.py
@@ -23,6 +23,7 @@ from cloudinit import get_cpath
frequency = per_instance
runparts_path = "%s/%s" % (get_cpath(), "scripts/per-instance")
+
def handle(_name, _cfg, _cloud, log, _args):
try:
util.runparts(runparts_path)
diff --git a/cloudinit/CloudConfig/cc_scripts_per_once.py b/cloudinit/CloudConfig/cc_scripts_per_once.py
index 6c43c6f0..bbf77dfb 100644
--- a/cloudinit/CloudConfig/cc_scripts_per_once.py
+++ b/cloudinit/CloudConfig/cc_scripts_per_once.py
@@ -23,6 +23,7 @@ from cloudinit import get_cpath
frequency = per_once
runparts_path = "%s/%s" % (get_cpath(), "scripts/per-once")
+
def handle(_name, _cfg, _cloud, log, _args):
try:
util.runparts(runparts_path)
diff --git a/cloudinit/CloudConfig/cc_scripts_user.py b/cloudinit/CloudConfig/cc_scripts_user.py
index 3db3c7a6..949b4198 100644
--- a/cloudinit/CloudConfig/cc_scripts_user.py
+++ b/cloudinit/CloudConfig/cc_scripts_user.py
@@ -23,6 +23,7 @@ from cloudinit import get_ipath_cur
frequency = per_instance
runparts_path = "%s/%s" % (get_ipath_cur(), "scripts")
+
def handle(_name, _cfg, _cloud, log, _args):
try:
util.runparts(runparts_path)
diff --git a/cloudinit/CloudConfig/cc_set_hostname.py b/cloudinit/CloudConfig/cc_set_hostname.py
index 18189ed0..0b1c8924 100644
--- a/cloudinit/CloudConfig/cc_set_hostname.py
+++ b/cloudinit/CloudConfig/cc_set_hostname.py
@@ -18,12 +18,13 @@
import cloudinit.util as util
+
def handle(_name, cfg, cloud, log, _args):
if util.get_cfg_option_bool(cfg, "preserve_hostname", False):
log.debug("preserve_hostname is set. not setting hostname")
return(True)
- ( hostname, _fqdn ) = util.get_hostname_fqdn(cfg, cloud)
+ (hostname, _fqdn) = util.get_hostname_fqdn(cfg, cloud)
try:
set_hostname(hostname, log)
except Exception:
@@ -32,6 +33,7 @@ def handle(_name, cfg, cloud, log, _args):
return(True)
+
def set_hostname(hostname, log):
util.subp(['hostname', hostname])
util.write_file("/etc/hostname", "%s\n" % hostname, 0644)
diff --git a/cloudinit/CloudConfig/cc_set_passwords.py b/cloudinit/CloudConfig/cc_set_passwords.py
index 15533460..05384f4f 100644
--- a/cloudinit/CloudConfig/cc_set_passwords.py
+++ b/cloudinit/CloudConfig/cc_set_passwords.py
@@ -21,6 +21,7 @@ import sys
import random
import string
+
def handle(_name, cfg, _cloud, log, args):
if len(args) != 0:
# if run from command line, and give args, wipe the chpasswd['list']
@@ -56,7 +57,7 @@ def handle(_name, cfg, _cloud, log, args):
randlist.append("%s:%s" % (u, p))
plist_in.append("%s:%s" % (u, p))
users.append(u)
-
+
ch_in = '\n'.join(plist_in)
try:
util.subp(['chpasswd'], ch_in)
@@ -67,7 +68,7 @@ def handle(_name, cfg, _cloud, log, args):
if len(randlist):
sys.stdout.write("%s\n%s\n" % ("Set the following passwords\n",
- '\n'.join(randlist) ))
+ '\n'.join(randlist)))
if expire:
enum = len(errors)
@@ -76,27 +77,27 @@ def handle(_name, cfg, _cloud, log, args):
util.subp(['passwd', '--expire', u])
except Exception as e:
errors.append(e)
- log.warn("failed to expire account for %s" % u )
+ log.warn("failed to expire account for %s" % u)
if enum == len(errors):
log.debug("expired passwords for: %s" % u)
if 'ssh_pwauth' in cfg:
val = str(cfg['ssh_pwauth']).lower()
- if val in ( "true", "1", "yes"):
+ if val in ("true", "1", "yes"):
pw_auth = "yes"
change_pwauth = True
- elif val in ( "false", "0", "no"):
+ elif val in ("false", "0", "no"):
pw_auth = "no"
change_pwauth = True
else:
change_pwauth = False
-
+
if change_pwauth:
pa_s = "\(#*\)\(PasswordAuthentication[[:space:]]\+\)\(yes\|no\)"
msg = "set PasswordAuthentication to '%s'" % pw_auth
try:
- cmd = [ 'sed', '-i', 's,%s,\\2%s,' % (pa_s, pw_auth),
- '/etc/ssh/sshd_config' ]
+ cmd = ['sed', '-i', 's,%s,\\2%s,' % (pa_s, pw_auth),
+ '/etc/ssh/sshd_config']
util.subp(cmd)
log.debug(msg)
except Exception as e:
@@ -104,7 +105,8 @@ def handle(_name, cfg, _cloud, log, args):
errors.append(e)
try:
- p = util.subp(['service', cfg.get('ssh_svcname', 'ssh'), 'restart'])
+ p = util.subp(['service', cfg.get('ssh_svcname', 'ssh'),
+ 'restart'])
log.debug("restarted sshd")
except:
log.warn("restart of ssh failed")
@@ -114,11 +116,12 @@ def handle(_name, cfg, _cloud, log, args):
return
-def rand_str(strlen=32, select_from=string.letters+string.digits):
+
+def rand_str(strlen=32, select_from=string.letters + string.digits):
return("".join([random.choice(select_from) for _x in range(0, strlen)]))
+
def rand_user_password(pwlen=9):
selfrom = (string.letters.translate(None, 'loLOI') +
string.digits.translate(None, '01'))
return(rand_str(pwlen, select_from=selfrom))
-
diff --git a/cloudinit/CloudConfig/cc_ssh.py b/cloudinit/CloudConfig/cc_ssh.py
index b6ac1edb..39862117 100644
--- a/cloudinit/CloudConfig/cc_ssh.py
+++ b/cloudinit/CloudConfig/cc_ssh.py
@@ -25,9 +25,9 @@ DISABLE_ROOT_OPTS = "no-port-forwarding,no-agent-forwarding," \
"no-X11-forwarding,command=\"echo \'Please login as the user \\\"$USER\\\" " \
"rather than the user \\\"root\\\".\';echo;sleep 10\""
-
global_log = None
+
def handle(_name, cfg, cloud, log, _args):
global global_log
global_log = log
@@ -40,23 +40,23 @@ def handle(_name, cfg, cloud, log, _args):
except:
pass
- if cfg.has_key("ssh_keys"):
+ if "ssh_keys" in cfg:
# if there are keys in cloud-config, use them
key2file = {
- "rsa_private" : ("/etc/ssh/ssh_host_rsa_key", 0600),
- "rsa_public" : ("/etc/ssh/ssh_host_rsa_key.pub", 0644),
- "dsa_private" : ("/etc/ssh/ssh_host_dsa_key", 0600),
- "dsa_public" : ("/etc/ssh/ssh_host_dsa_key.pub", 0644),
- "ecdsa_private" : ("/etc/ssh/ssh_host_ecdsa_key", 0600),
- "ecdsa_public" : ("/etc/ssh/ssh_host_ecdsa_key.pub", 0644),
+ "rsa_private": ("/etc/ssh/ssh_host_rsa_key", 0600),
+ "rsa_public": ("/etc/ssh/ssh_host_rsa_key.pub", 0644),
+ "dsa_private": ("/etc/ssh/ssh_host_dsa_key", 0600),
+ "dsa_public": ("/etc/ssh/ssh_host_dsa_key.pub", 0644),
+ "ecdsa_private": ("/etc/ssh/ssh_host_ecdsa_key", 0600),
+ "ecdsa_public": ("/etc/ssh/ssh_host_ecdsa_key.pub", 0644),
}
for key, val in cfg["ssh_keys"].items():
- if key2file.has_key(key):
+ if key in key2file:
util.write_file(key2file[key][0], val, key2file[key][1])
- priv2pub = { 'rsa_private':'rsa_public', 'dsa_private':'dsa_public',
- 'ecdsa_private': 'ecdsa_public', }
+ priv2pub = {'rsa_private': 'rsa_public', 'dsa_private': 'dsa_public',
+ 'ecdsa_private': 'ecdsa_public', }
cmd = 'o=$(ssh-keygen -yf "%s") && echo "$o" root@localhost > "%s"'
for priv, pub in priv2pub.iteritems():
@@ -68,7 +68,7 @@ def handle(_name, cfg, cloud, log, _args):
else:
# if not, generate them
for keytype in util.get_cfg_option_list_or_str(cfg, 'ssh_genkeytypes',
- ['rsa', 'dsa', 'ecdsa']):
+ ['rsa', 'dsa', 'ecdsa']):
keyfile = '/etc/ssh/ssh_host_%s_key' % keytype
if not os.path.exists(keyfile):
subprocess.call(['ssh-keygen', '-t', keytype, '-N', '',
@@ -83,7 +83,7 @@ def handle(_name, cfg, cloud, log, _args):
DISABLE_ROOT_OPTS)
keys = cloud.get_public_ssh_keys()
- if cfg.has_key("ssh_authorized_keys"):
+ if "ssh_authorized_keys" in cfg:
cfgkeys = cfg["ssh_authorized_keys"]
keys.extend(cfgkeys)
@@ -92,16 +92,16 @@ def handle(_name, cfg, cloud, log, _args):
util.logexc(log)
log.warn("applying credentials failed!\n")
+
def apply_credentials(keys, user, disable_root,
disable_root_opts=DISABLE_ROOT_OPTS, log=global_log):
keys = set(keys)
if user:
sshutil.setup_user_keys(keys, user, '', log)
-
+
if disable_root:
key_prefix = disable_root_opts.replace('$USER', user)
else:
key_prefix = ''
sshutil.setup_user_keys(keys, 'root', key_prefix, log)
-
diff --git a/cloudinit/CloudConfig/cc_ssh_import_id.py b/cloudinit/CloudConfig/cc_ssh_import_id.py
index efcd4296..f14a99cd 100644
--- a/cloudinit/CloudConfig/cc_ssh_import_id.py
+++ b/cloudinit/CloudConfig/cc_ssh_import_id.py
@@ -19,10 +19,11 @@ import cloudinit.util as util
import subprocess
import traceback
+
def handle(_name, cfg, _cloud, log, args):
if len(args) != 0:
user = args[0]
- ids = [ ]
+ ids = []
if len(args) > 1:
ids = args[1:]
else:
@@ -32,7 +33,7 @@ def handle(_name, cfg, _cloud, log, args):
if len(ids) == 0:
return
- cmd = [ "sudo", "-Hu", user, "ssh-import-id" ] + ids
+ cmd = ["sudo", "-Hu", user, "ssh-import-id"] + ids
log.debug("importing ssh ids. cmd = %s" % cmd)
@@ -40,7 +41,7 @@ def handle(_name, cfg, _cloud, log, args):
subprocess.check_call(cmd)
except subprocess.CalledProcessError as e:
log.debug(traceback.format_exc(e))
- raise Exception("Cmd returned %s: %s" % ( e.returncode, cmd))
+ raise Exception("Cmd returned %s: %s" % (e.returncode, cmd))
except OSError as e:
log.debug(traceback.format_exc(e))
- raise Exception("Cmd failed to execute: %s" % ( cmd ))
+ raise Exception("Cmd failed to execute: %s" % (cmd))
diff --git a/cloudinit/CloudConfig/cc_timezone.py b/cloudinit/CloudConfig/cc_timezone.py
index 87855503..6f0e8f6b 100644
--- a/cloudinit/CloudConfig/cc_timezone.py
+++ b/cloudinit/CloudConfig/cc_timezone.py
@@ -24,6 +24,7 @@ import shutil
frequency = per_instance
tz_base = "/usr/share/zoneinfo"
+
def handle(_name, cfg, _cloud, log, args):
if len(args) != 0:
timezone = args[0]
@@ -33,7 +34,7 @@ def handle(_name, cfg, _cloud, log, args):
if not timezone:
return
- tz_file = "%s/%s" % (tz_base , timezone)
+ tz_file = "%s/%s" % (tz_base, timezone)
if not os.path.isfile(tz_file):
log.debug("Invalid timezone %s" % tz_file)
@@ -59,6 +60,6 @@ def handle(_name, cfg, _cloud, log, args):
except:
log.debug("failed to copy %s to /etc/localtime" % tz_file)
raise
-
+
log.debug("set timezone to %s" % timezone)
return
diff --git a/cloudinit/CloudConfig/cc_update_etc_hosts.py b/cloudinit/CloudConfig/cc_update_etc_hosts.py
index 66f0537c..131e1a1e 100644
--- a/cloudinit/CloudConfig/cc_update_etc_hosts.py
+++ b/cloudinit/CloudConfig/cc_update_etc_hosts.py
@@ -21,8 +21,9 @@ import StringIO
frequency = per_always
+
def handle(_name, cfg, cloud, log, _args):
- ( hostname, fqdn ) = util.get_hostname_fqdn(cfg, cloud)
+ (hostname, fqdn) = util.get_hostname_fqdn(cfg, cloud)
manage_hosts = util.get_cfg_option_bool(cfg, "manage_etc_hosts", False)
if manage_hosts in ("True", "true", True, "template"):
@@ -32,8 +33,8 @@ def handle(_name, cfg, cloud, log, _args):
log.info("manage_etc_hosts was set, but no hostname found")
return
- util.render_to_file('hosts', '/etc/hosts', \
- { 'hostname' : hostname, 'fqdn' : fqdn })
+ util.render_to_file('hosts', '/etc/hosts',
+ {'hostname': hostname, 'fqdn': fqdn})
except Exception:
log.warn("failed to update /etc/hosts")
raise
@@ -81,4 +82,3 @@ def update_etc_hosts(hostname, fqdn, _log):
new_etcfile.close()
new_etchosts.close()
return
-
diff --git a/cloudinit/CloudConfig/cc_update_hostname.py b/cloudinit/CloudConfig/cc_update_hostname.py
index 893c99e0..2387a8dc 100644
--- a/cloudinit/CloudConfig/cc_update_hostname.py
+++ b/cloudinit/CloudConfig/cc_update_hostname.py
@@ -22,19 +22,21 @@ from cloudinit.CloudConfig import per_always
frequency = per_always
+
def handle(_name, cfg, cloud, log, _args):
if util.get_cfg_option_bool(cfg, "preserve_hostname", False):
log.debug("preserve_hostname is set. not updating hostname")
return
- ( hostname, _fqdn ) = util.get_hostname_fqdn(cfg, cloud)
+ (hostname, _fqdn) = util.get_hostname_fqdn(cfg, cloud)
try:
- prev ="%s/%s" % (cloud.get_cpath('data'), "previous-hostname")
+ prev = "%s/%s" % (cloud.get_cpath('data'), "previous-hostname")
update_hostname(hostname, prev, log)
except Exception:
log.warn("failed to set hostname\n")
raise
+
# read hostname from a 'hostname' file
# allow for comments and stripping line endings.
# if file doesn't exist, or no contents, return default
@@ -54,7 +56,8 @@ def read_hostname(filename, default=None):
if e.errno != errno.ENOENT:
raise
return default
-
+
+
def update_hostname(hostname, prev_file, log):
etc_file = "/etc/hostname"
@@ -75,7 +78,7 @@ def update_hostname(hostname, prev_file, log):
if not hostname_prev or hostname_prev != hostname:
update_files.append(prev_file)
- if (not hostname_in_etc or
+ if (not hostname_in_etc or
(hostname_in_etc == hostname_prev and hostname_in_etc != hostname)):
update_files.append(etc_file)
@@ -93,4 +96,3 @@ def update_hostname(hostname, prev_file, log):
if etc_file in update_files:
log.debug("setting hostname to %s" % hostname)
subprocess.Popen(['hostname', hostname]).communicate()
-