aboutsummaryrefslogtreecommitdiffstats
path: root/testing/cloud-init
diff options
context:
space:
mode:
authorTBK <tbk@jjtc.eu>2018-06-24 21:32:01 +0200
committerNatanael Copa <ncopa@alpinelinux.org>2018-08-16 20:44:23 +0000
commit802ebae0b8449fdc6e5c152143362c530353a92b (patch)
tree68b79bbdd1eae18a9ad26d28cc3111732dd3a1a5 /testing/cloud-init
parent1b8868650ab5dcafa306b01f675338f0e458cd14 (diff)
downloadaports-802ebae0b8449fdc6e5c152143362c530353a92b.tar.bz2
aports-802ebae0b8449fdc6e5c152143362c530353a92b.tar.xz
testing/cloud-init: upgrade to 18.3, modernize
Diffstat (limited to 'testing/cloud-init')
-rw-r--r--testing/cloud-init/10-setup.patch12
-rw-r--r--testing/cloud-init/20-alpine.patch223
-rw-r--r--testing/cloud-init/APKBUILD102
-rw-r--r--testing/cloud-init/add_distro-alpine.patch10
-rw-r--r--testing/cloud-init/alpine.py205
-rw-r--r--testing/cloud-init/cloud-config.initd13
-rw-r--r--testing/cloud-init/cloud-final.initd11
-rw-r--r--testing/cloud-init/cloud-init-local.initd13
-rw-r--r--testing/cloud-init/cloud-init.initd14
-rw-r--r--testing/cloud-init/cloud-init.post-install4
-rw-r--r--testing/cloud-init/cloud-init.pre-install4
-rw-r--r--testing/cloud-init/cloud.cfg5
12 files changed, 259 insertions, 357 deletions
diff --git a/testing/cloud-init/10-setup.patch b/testing/cloud-init/10-setup.patch
deleted file mode 100644
index 6ee9a7cd01..0000000000
--- a/testing/cloud-init/10-setup.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- cloud-init-0.7.6/setup.py.orig
-+++ cloud-init-0.7.6/setup.py
-@@ -160,9 +160,4 @@
- [f for f in glob('doc/examples/seed/*') if is_f(f)]),
- ],
- install_requires=read_requires(),
-- cmdclass={
-- # Use a subclass for install that handles
-- # adding on the right init system configuration files
-- 'install': InitsysInstallData,
-- },
- )
diff --git a/testing/cloud-init/20-alpine.patch b/testing/cloud-init/20-alpine.patch
deleted file mode 100644
index cb15934b73..0000000000
--- a/testing/cloud-init/20-alpine.patch
+++ /dev/null
@@ -1,223 +0,0 @@
-=== modified file 'cloudinit/distros/__init__.py'
---- a/cloudinit/distros/__init__.py 2014-09-10 18:32:37 +0000
-+++ b/cloudinit/distros/__init__.py 2016-03-01 10:16:18 +0000
-@@ -43,6 +43,7 @@
- 'freebsd': ['freebsd'],
- 'suse': ['sles'],
- 'arch': ['arch'],
-+ 'alpine': ['alpine'],
- }
-
- LOG = logging.getLogger(__name__)
-
-=== added file 'cloudinit/distros/alpine.py'
---- a/cloudinit/distros/alpine.py 1970-01-01 00:00:00 +0000
-+++ b/cloudinit/distros/alpine.py 2016-03-01 10:21:41 +0000
-@@ -0,0 +1,207 @@
-+# vi: ts=4 expandtab
-+#
-+# Copyright (C) 2016 Matt Dainty
-+#
-+# Author: Matt Dainty <matt@bodgit-n-scarper.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 distros
-+from cloudinit import helpers
-+from cloudinit import log as logging
-+from cloudinit import util
-+
-+from cloudinit.distros.parsers.hostname import HostnameConf
-+
-+from cloudinit.settings import PER_INSTANCE
-+
-+LOG = logging.getLogger(__name__)
-+
-+
-+class Distro(distros.Distro):
-+ network_conf_fn = "/etc/network/interfaces"
-+ init_cmd = ['rc-service'] # init scripts
-+
-+ def __init__(self, name, cfg, paths):
-+ distros.Distro.__init__(self, name, cfg, paths)
-+ # This will be used to restrict certain
-+ # calls from repeatly happening (when they
-+ # should only happen say once per instance...)
-+ self._runner = helpers.Runners(paths)
-+ self.osfamily = 'alpine'
-+ cfg['ssh_svcname'] = 'sshd'
-+
-+ def apply_locale(self, locale, out_fn=None):
-+ # No locale support yet
-+ pass
-+
-+ def install_packages(self, pkglist):
-+ self.update_package_sources()
-+ self.package_command('add', pkgs=pkglist)
-+
-+ def _write_network(self, settings):
-+ util.write_file(self.network_conf_fn, settings)
-+ return ['all']
-+
-+ def _bring_up_interfaces(self, device_names):
-+ use_all = False
-+ for d in device_names:
-+ if d == 'all':
-+ use_all = True
-+ if use_all:
-+ return distros.Distro._bring_up_interface(self, '--all')
-+ else:
-+ return distros.Distro._bring_up_interfaces(self, device_names)
-+
-+ def _select_hostname(self, hostname, fqdn):
-+ # Prefer the short hostname over the long
-+ # fully qualified domain name
-+ if not hostname:
-+ return fqdn
-+ return hostname
-+
-+ def _write_hostname(self, your_hostname, out_fn):
-+ conf = None
-+ try:
-+ # Try to update the previous one
-+ # so lets see if we can read it first.
-+ conf = self._read_hostname_conf(out_fn)
-+ except IOError:
-+ pass
-+ if not conf:
-+ conf = HostnameConf('')
-+ conf.set_hostname(your_hostname)
-+ util.write_file(out_fn, str(conf), 0644)
-+
-+ def _read_system_hostname(self):
-+ sys_hostname = self._read_hostname(self.hostname_conf_fn)
-+ return (self.hostname_conf_fn, sys_hostname)
-+
-+ def _read_hostname_conf(self, filename):
-+ conf = HostnameConf(util.load_file(filename))
-+ conf.parse()
-+ return conf
-+
-+ def _read_hostname(self, filename, default=None):
-+ hostname = None
-+ try:
-+ conf = self._read_hostname_conf(filename)
-+ hostname = conf.hostname
-+ except IOError:
-+ pass
-+ if not hostname:
-+ return default
-+ return hostname
-+
-+ def set_timezone(self, tz):
-+ distros.set_etc_timezone(tz=tz, tz_file=self._find_tz_file(tz))
-+
-+ def package_command(self, command, args=None, pkgs=None):
-+ if pkgs is None:
-+ pkgs = []
-+
-+ cmd = ['apk']
-+ # Redirect output
-+ cmd.append("--quiet")
-+
-+ if args and isinstance(args, str):
-+ cmd.append(args)
-+ elif args and isinstance(args, list):
-+ cmd.extend(args)
-+
-+ if command:
-+ cmd.append(command)
-+
-+ pkglist = util.expand_package_list('%s-%s', pkgs)
-+ cmd.extend(pkglist)
-+
-+ # Allow the output of this to flow outwards (ie not be captured)
-+ util.subp(cmd, capture=False)
-+
-+ def update_package_sources(self):
-+ self._runner.run("update-sources", self.package_command,
-+ ["update"], freq=PER_INSTANCE)
-+
-+ def add_user(self, name, **kwargs):
-+ if util.is_user(name):
-+ LOG.info("User %s already exists, skipping." % name)
-+ return
-+
-+ adduser_cmd = ['adduser', name, '-D']
-+ log_adduser_cmd = ['adduser', name, '-D']
-+
-+ # Since we are creating users, we want to carefully validate the
-+ # inputs. If something goes wrong, we can end up with a system
-+ # that nobody can login to.
-+ adduser_opts = {
-+ "gecos": '-g',
-+ "homedir": '-h',
-+ "uid": '-u',
-+ "shell": '-s',
-+ }
-+
-+ adduser_flags = {
-+ "system": '-S',
-+ }
-+
-+ redact_opts = ['passwd']
-+
-+ # Check the values and create the command
-+ for key, val in kwargs.items():
-+
-+ if key in adduser_opts and val and isinstance(val, str):
-+ adduser_cmd.extend([adduser_opts[key], val])
-+
-+ # Redact certain fields from the logs
-+ if key in redact_opts:
-+ log_adduser_cmd.extend([adduser_opts[key], 'REDACTED'])
-+ else:
-+ log_adduser_cmd.extend([adduser_opts[key], val])
-+
-+ elif key in adduser_flags and val:
-+ adduser_cmd.append(adduser_flags[key])
-+ log_adduser_cmd.append(adduser_flags[key])
-+
-+ # Don't create the home directory if directed so or if the user is a
-+ # system user
-+ if 'no_create_home' in kwargs or 'system' in kwargs:
-+ adduser_cmd.append('-H')
-+ log_adduser_cmd.append('-H')
-+
-+ # Run the command
-+ LOG.debug("Adding user %s", name)
-+ try:
-+ util.subp(adduser_cmd, logstring=log_adduser_cmd)
-+ except Exception as e:
-+ util.logexc(LOG, "Failed to create user %s", name)
-+ raise e
-+
-+ # Unlock the user
-+ LOG.debug("Unlocking user %s", name)
-+ try:
-+ util.subp(['passwd', '-u', name], logstring=['passwd', '-u', name])
-+ except Exception as e:
-+ util.logexc(LOG, "Failed to unlock user %s", name)
-+ raise e
-+
-+ if 'groups' in kwargs:
-+ groups = kwargs['groups']
-+ if groups and isinstance(groups, str):
-+ # Why are these even a single string in the first place?
-+ groups = groups.split(',')
-+ for group in groups:
-+ try:
-+ util.subp(['adduser', name, group], logstring=['adduser', name, group])
-+ except Exception as e:
-+ util.logexc(LOG, "Failed to add user %s to group %s", name, group)
-+ raise e
diff --git a/testing/cloud-init/APKBUILD b/testing/cloud-init/APKBUILD
index a86ffb6889..1628885a4d 100644
--- a/testing/cloud-init/APKBUILD
+++ b/testing/cloud-init/APKBUILD
@@ -1,52 +1,44 @@
# Contributor: Matt Dainty <matt+alpine@bodgit-n-scarper.com>
-# Maintainer:
+# Maintainer:
pkgname=cloud-init
-pkgver=0.7.6
-pkgrel=2
+pkgver=18.3
+pkgrel=0
pkgdesc="Cloud instance init scripts"
-url="http://launchpad.net/cloud-init"
+url="https://cloud-init.io"
arch="noarch"
-depends="e2fsprogs-extra python2 py-cheetah py-configobj py-jinja2 py-jsonpatch py-oauth2 py-prettytable py-requests py-serial py-yaml"
-makedepends="py-setuptools"
-install="$pkgname.pre-install $pkgname.post-install"
-subpackages="$pkgname-doc"
-source="
- https://launchpad.net/$pkgname/trunk/$pkgver/+download/$pkgname-$pkgver.tar.gz
license="Apache-2.0 GPL-3.0-only"
- 10-setup.patch
- 20-alpine.patch
- cloud-init-local.initd
- cloud-init.initd
- cloud-config.initd
- cloud-final.initd
+depends="e2fsprogs-extra python3 py3-configobj py3-jinja2 py3-jsonpatch py3-jsonschema
+ py3-oauthlib py3-requests py3-serial py3-six py3-yaml"
+makedepends="py3-setuptools"
+subpackages="$pkgname-doc $pkgname-bash-completion:bashcomp:noarch $pkgname-openrc"
+source="https://launchpad.net/cloud-init/trunk/18.3/+download/$pkgname-$pkgver.tar.gz
+ add_distro-alpine.patch
cloud.cfg
hosts.alpine.tmpl
+ alpine.py
"
-
-_builddir="$srcdir"/$pkgname-$pkgver
+builddir="$srcdir"/$pkgname-$pkgver
prepare() {
- local i
- cd "$_builddir"
- for i in $source; do
- case $i in
- *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
- esac
- done
+ cd "$builddir"
+ default_prepare
+
+ install -m644 "$srcdir"/alpine.py \
+ "$builddir"/cloudinit/distros/
}
build() {
- cd "$_builddir"
- python2 setup.py build || return 1
+ cd "$builddir"
+ python3 setup.py build
}
-package() {
- cd "$_builddir"
- python2 setup.py install --prefix=/usr --root="$pkgdir" || return 1
+check() {
+ cd "$builddir"
+ python3 setup.py check
+}
- for i in init-local init config final; do
- install -m755 -D "$srcdir"/cloud-$i.initd \
- "$pkgdir"/etc/init.d/cloud-$i || return 1
- done
+package() {
+ cd "$builddir"
+ python3 setup.py install --prefix=/usr --root="$pkgdir" --init-system=sysvinit_openrc
install -m644 "$srcdir"/cloud.cfg \
"$pkgdir"/etc/cloud/
@@ -55,30 +47,18 @@ package() {
"$pkgdir"/etc/cloud/templates/
}
-md5sums="cd392e943dd0165e90a6d56afd0e4ad3 cloud-init-0.7.6.tar.gz
-90a78c24b1a2ed537d5e7c28c48780d5 10-setup.patch
-214a3c1a58bd6649bed43998ca50e023 20-alpine.patch
-80892c13e65a5040f32b4d86e848b6bb cloud-init-local.initd
-0041569a737713ea01a154d98007c2e5 cloud-init.initd
-3ff3ae1e27950abf3064da60c23669ba cloud-config.initd
-0824fad27c2bf1b966e8820f51d2fde0 cloud-final.initd
-ea4ccef56c030b694ad799fb03e3e462 cloud.cfg
-3e700738d75419687128a93cbdc35857 hosts.alpine.tmpl"
-sha256sums="9e8fd22eb7f6e40ae6a5f66173ddc3cc18f65ee406c460a728092b37db2f3ed7 cloud-init-0.7.6.tar.gz
-a26154be7b331859660c620ad56f59910b1a832fff3a1d0597a1d8204e1b7846 10-setup.patch
-73dc3a201c4e208c28e5119c3cd5ff276bfec6f6b87746113876558acf240609 20-alpine.patch
-0fc8f79a4675e57b9475ac8fbe92898b17284f6ad903ec1ea9a795783e70ed33 cloud-init-local.initd
-ce227ff37516fc08702996903762704dd255a16d391ed2853fe5d5b88d28231d cloud-init.initd
-3581bf4d4a0b7011edef76c40237517c3fb350c477ffaead1abcdcf4bb8bbe24 cloud-config.initd
-1e5fe801a9981a721e4cb6ebc1f7fd9df2dec1683dae9ab6fd15f8e8338fb7d3 cloud-final.initd
-4f688c5d3780f7b9883694323b0222b92b14d4edbe25d08aa2ca9da3b42e65c9 cloud.cfg
-43bcfcd5ff1117a9b54be22f5e50f04aa78fe6574271be7c01d472921d3f04c3 hosts.alpine.tmpl"
-sha512sums="aa2397328afda8e77ed6d642e7642f41a4b4b5bcd3d0e87056aa8c88b56624ec65c57cfc66b0d13ccc235f1840baf1d577316974902a0439cf2f2eb0f8eef36d cloud-init-0.7.6.tar.gz
-502de73eb899d751f025d7d268d3a4eb086177a86da5d6e223b7243ecdb30b93bd3ecb974cfa1f900d2adc8ce2bbc8cd1be23a10115e709b1f2cc22b704d575d 10-setup.patch
-c0ef63ff95f6d8d12ea3f55758fd6ba1dbd7ef2100577135b1f54bb3c239ac37aabba5644742bbf865ba379256efe08847731e8379cff27613b29ac07edd131b 20-alpine.patch
-f3131d9fb8b59fb44be1bb9293cfc1809c370efd4c4d215f5a3b337305bf4982d98d4905bcf077b32edfb4d0b605a4db5704779ac667c3546a9cbdd54a95e28e cloud-init-local.initd
-dccdbbe2e8ff7cdf28da2f6ddbbcda3f3c29c99d8b89476d03cb2e46e158614f7a5deea2284d807938e9d12600f642747cd020bd88412d6f3906195d78aa9f5e cloud-init.initd
-644b583eb96ec93bfe71fea27408f29ef432b7535d70dc3eb4b2a99b5131c30310971e4502d100047f0909ce00f58ef42fd9be907a99388dc9f7b98ba3f27ebf cloud-config.initd
-22970d575b5576689b638badfc1248b4710edb33421470b42d0d838a99806b01cefd9346033dc22a062c9eb6c52625966d73722386da9ad632f65fdcd2f10d93 cloud-final.initd
-1b83382a0f1aa8044eed5b7390b81897c9f6a3601577396cc803f15b1840419eda3cef37b15d2dee226d9a27434b0a899466ed6860cccdfb244b60edd9bed281 cloud.cfg
-813a67d446ee65f5ef5a45fe60bef4d0e404c5d1f9cb732bc0ec0b706a0274f4bc1e7f87e676da1ca9366c2f933163f620ee296ed783372869438dd8a928117b hosts.alpine.tmpl"
+bashcomp() {
+ depends="bash"
+ pkgdesc="Bash completions for $pkgname"
+ install_if="$pkgname=$pkgver-r$pkgrel bash-completion"
+
+ cd "$builddir"
+ mkdir -p "$subpkgdir"/usr/share/bash-completion/completions
+ cp bash_completion/$pkgname "$subpkgdir"/usr/share/bash-completion/completions/$pkgname
+}
+
+sha512sums="e066c48f74ed21d4bd673dbeb17fabbacc107369c5c10e656b166257313f50cf9ab6af5ec69f2e8cc2abf22261c4fa86ca88e41c98c66985439f9af144d7c8cc cloud-init-18.3.tar.gz
+4ab37323e7662445af90ce2654199fe3080e256571e8e12b121ebde791b98e68d368b10c5f22b7e8840c0ba9593dd0a6e37ec60724cd0ae4c806944a826741e3 add_distro-alpine.patch
+7dd8c3a2050af5536154e77cc3913d34b7d85d02130ea9b9f5b54710f96cd22cb4c255af34f3c710a1319f9bd0f667441482695e9bad927026f952d0cf39de41 cloud.cfg
+813a67d446ee65f5ef5a45fe60bef4d0e404c5d1f9cb732bc0ec0b706a0274f4bc1e7f87e676da1ca9366c2f933163f620ee296ed783372869438dd8a928117b hosts.alpine.tmpl
+301e99d25cbe3607f6187ef477e15c8ffc356456117fcd662528194d880a989ba79622208eb84c27decf19060c3810c9ff11441d041c2061feced823e453acaf alpine.py"
diff --git a/testing/cloud-init/add_distro-alpine.patch b/testing/cloud-init/add_distro-alpine.patch
new file mode 100644
index 0000000000..ed27e1daa3
--- /dev/null
+++ b/testing/cloud-init/add_distro-alpine.patch
@@ -0,0 +1,10 @@
+--- a/cloudinit/distros/__init__.py
++++ b/cloudinit/distros/__init__.py
+@@ -41,6 +41,7 @@
+ 'freebsd': ['freebsd'],
+ 'suse': ['opensuse', 'sles'],
+ 'arch': ['arch'],
++ 'alpine': ['alpine'],
+ }
+
+ LOG = logging.getLogger(__name__)
diff --git a/testing/cloud-init/alpine.py b/testing/cloud-init/alpine.py
new file mode 100644
index 0000000000..31b9e1840b
--- /dev/null
+++ b/testing/cloud-init/alpine.py
@@ -0,0 +1,205 @@
+# Copyright (C) 2016 Matt Dainty
+#
+# Author: Matt Dainty <matt@bodgit-n-scarper.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 distros
+from cloudinit import helpers
+from cloudinit import log as logging
+from cloudinit import util
+
+from cloudinit.distros.parsers.hostname import HostnameConf
+
+from cloudinit.settings import PER_INSTANCE
+
+LOG = logging.getLogger(__name__)
+
+
+class Distro(distros.Distro):
+ network_conf_fn = "/etc/network/interfaces"
+ init_cmd = ['rc-service'] # init scripts
+
+ def __init__(self, name, cfg, paths):
+ distros.Distro.__init__(self, name, cfg, paths)
+ # This will be used to restrict certain
+ # calls from repeatly happening (when they
+ # should only happen say once per instance...)
+ self._runner = helpers.Runners(paths)
+ self.osfamily = 'alpine'
+ cfg['ssh_svcname'] = 'sshd'
+
+ def apply_locale(self, locale, out_fn=None):
+ # No locale support yet
+ pass
+
+ def install_packages(self, pkglist):
+ self.update_package_sources()
+ self.package_command('add', pkgs=pkglist)
+
+ def _write_network(self, settings):
+ util.write_file(self.network_conf_fn, settings)
+ return ['all']
+
+ def _bring_up_interfaces(self, device_names):
+ use_all = False
+ for d in device_names:
+ if d == 'all':
+ use_all = True
+ if use_all:
+ return distros.Distro._bring_up_interface(self, '--all')
+ else:
+ return distros.Distro._bring_up_interfaces(self, device_names)
+
+ def _select_hostname(self, hostname, fqdn):
+ # Prefer the short hostname over the long
+ # fully qualified domain name
+ if not hostname:
+ return fqdn
+ return hostname
+
+ def _write_hostname(self, your_hostname, out_fn):
+ conf = None
+ try:
+ # Try to update the previous one
+ # so lets see if we can read it first.
+ conf = self._read_hostname_conf(out_fn)
+ except IOError:
+ pass
+ if not conf:
+ conf = HostnameConf('')
+ conf.set_hostname(your_hostname)
+ util.write_file(out_fn, str(conf), 0o644)
+
+ def _read_system_hostname(self):
+ sys_hostname = self._read_hostname(self.hostname_conf_fn)
+ return (self.hostname_conf_fn, sys_hostname)
+
+ def _read_hostname_conf(self, filename):
+ conf = HostnameConf(util.load_file(filename))
+ conf.parse()
+ return conf
+
+ def _read_hostname(self, filename, default=None):
+ hostname = None
+ try:
+ conf = self._read_hostname_conf(filename)
+ hostname = conf.hostname
+ except IOError:
+ pass
+ if not hostname:
+ return default
+ return hostname
+
+ def set_timezone(self, tz):
+ distros.set_etc_timezone(tz=tz, tz_file=self._find_tz_file(tz))
+
+ def package_command(self, command, args=None, pkgs=None):
+ if pkgs is None:
+ pkgs = []
+
+ cmd = ['apk']
+ # Redirect output
+ cmd.append("--quiet")
+
+ if args and isinstance(args, str):
+ cmd.append(args)
+ elif args and isinstance(args, list):
+ cmd.extend(args)
+
+ if command:
+ cmd.append(command)
+
+ pkglist = util.expand_package_list('%s-%s', pkgs)
+ cmd.extend(pkglist)
+
+ # Allow the output of this to flow outwards (ie not be captured)
+ util.subp(cmd, capture=False)
+
+ def update_package_sources(self):
+ self._runner.run("update-sources", self.package_command,
+ ["update"], freq=PER_INSTANCE)
+
+ def add_user(self, name, **kwargs):
+ if util.is_user(name):
+ LOG.info("User %s already exists, skipping." % name)
+ return
+
+ adduser_cmd = ['adduser', name, '-D']
+ log_adduser_cmd = ['adduser', name, '-D']
+
+ # Since we are creating users, we want to carefully validate the
+ # inputs. If something goes wrong, we can end up with a system
+ # that nobody can login to.
+ adduser_opts = {
+ "gecos": '-g',
+ "homedir": '-h',
+ "uid": '-u',
+ "shell": '-s',
+ }
+
+ adduser_flags = {
+ "system": '-S',
+ }
+
+ redact_opts = ['passwd']
+
+ # Check the values and create the command
+ for key, val in kwargs.items():
+
+ if key in adduser_opts and val and isinstance(val, str):
+ adduser_cmd.extend([adduser_opts[key], val])
+
+ # Redact certain fields from the logs
+ if key in redact_opts:
+ log_adduser_cmd.extend([adduser_opts[key], 'REDACTED'])
+ else:
+ log_adduser_cmd.extend([adduser_opts[key], val])
+
+ elif key in adduser_flags and val:
+ adduser_cmd.append(adduser_flags[key])
+ log_adduser_cmd.append(adduser_flags[key])
+
+ # Don't create the home directory if directed so or if the user is a
+ # system user
+ if 'no_create_home' in kwargs or 'system' in kwargs:
+ adduser_cmd.append('-H')
+ log_adduser_cmd.append('-H')
+
+ # Run the command
+ LOG.debug("Adding user %s", name)
+ try:
+ util.subp(adduser_cmd, logstring=log_adduser_cmd)
+ except Exception as e:
+ util.logexc(LOG, "Failed to create user %s", name)
+ raise e
+
+ # Unlock the user
+ LOG.debug("Unlocking user %s", name)
+ try:
+ util.subp(['passwd', '-u', name], logstring=['passwd', '-u', name])
+ except Exception as e:
+ util.logexc(LOG, "Failed to unlock user %s", name)
+ raise e
+
+ if 'groups' in kwargs:
+ groups = kwargs['groups']
+ if groups and isinstance(groups, str):
+ # Why are these even a single string in the first place?
+ groups = groups.split(',')
+ for group in groups:
+ try:
+ util.subp(['adduser', name, group], logstring=['adduser', name, group])
+ except Exception as e:
+ util.logexc(LOG, "Failed to add user %s to group %s", name, group)
+ raise e
diff --git a/testing/cloud-init/cloud-config.initd b/testing/cloud-init/cloud-config.initd
deleted file mode 100644
index b0fa786d40..0000000000
--- a/testing/cloud-init/cloud-config.initd
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/sbin/runscript
-
-depend() {
- after cloud-init-local
- after cloud-init
- before cloud-final
- provide cloud-config
-}
-
-start() {
- cloud-init modules --mode config
- eend 0
-}
diff --git a/testing/cloud-init/cloud-final.initd b/testing/cloud-init/cloud-final.initd
deleted file mode 100644
index b457a35488..0000000000
--- a/testing/cloud-init/cloud-final.initd
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/sbin/runscript
-
-depend() {
- after cloud-config
- provide cloud-final
-}
-
-start() {
- cloud-init modules --mode final
- eend 0
-}
diff --git a/testing/cloud-init/cloud-init-local.initd b/testing/cloud-init/cloud-init-local.initd
deleted file mode 100644
index 9d47263e22..0000000000
--- a/testing/cloud-init/cloud-init-local.initd
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/sbin/runscript
-
-depend() {
- after localmount
- after netmount
- before cloud-init
- provide cloud-init-local
-}
-
-start() {
- cloud-init init --local
- eend 0
-}
diff --git a/testing/cloud-init/cloud-init.initd b/testing/cloud-init/cloud-init.initd
deleted file mode 100644
index c901449a9f..0000000000
--- a/testing/cloud-init/cloud-init.initd
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/sbin/runscript
-
-depend() {
- need net
- after firewall
- after cloud-init-local
- before cloud-config
- provide cloud-init
-}
-
-start() {
- cloud-init init
- eend 0
-}
diff --git a/testing/cloud-init/cloud-init.post-install b/testing/cloud-init/cloud-init.post-install
deleted file mode 100644
index 0586fcd5c5..0000000000
--- a/testing/cloud-init/cloud-init.post-install
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-
-# add something which happends after install
-
diff --git a/testing/cloud-init/cloud-init.pre-install b/testing/cloud-init/cloud-init.pre-install
deleted file mode 100644
index 46079e0c04..0000000000
--- a/testing/cloud-init/cloud-init.pre-install
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-
-# add something which happends before install
-
diff --git a/testing/cloud-init/cloud.cfg b/testing/cloud-init/cloud.cfg
index a526cdb5e2..26f1362448 100644
--- a/testing/cloud-init/cloud.cfg
+++ b/testing/cloud-init/cloud.cfg
@@ -18,6 +18,7 @@ ssh_pwauth: false
syslog_fix_perms: root:root
ssh_deletekeys: false
+ssh_genkeytypes: [rsa, dsa]
cloud_init_modules:
- seed_random
@@ -65,10 +66,10 @@ system_info:
# Default user name + that default users groups (if added/used)
default_user:
name: alpine
+ lock_passwd: false
gecos: Alpine
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
- shell: /bin/bash
- lock_passwd: false
+ shell: /bin/ash
# Other config here will be given to the distro class and/or path classes
paths:
cloud_dir: /var/lib/cloud/