summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChad Smith <chad.smith@canonical.com>2023-04-17 16:25:02 -0600
committerGitHub <noreply@github.com>2023-04-17 16:25:02 -0600
commit3ee384680e0a615834c1cb386be88c94f004b9b5 (patch)
tree257eb7c951fcd6da483fa9e57f2aafbe3aa9d58f
parentb71794094ac93942020b5f68f8f62900e1d09c97 (diff)
downloadcloud-init-git-3ee384680e0a615834c1cb386be88c94f004b9b5.tar.gz
users: schema permit empty list to indicate create no users
When defining json schema in a63f45f7, we were a bit too strict by setting `minItems: 1` on the `users:` list. This schema definition regressed the ability to prevent default_user creation with user-data. Remove that schema constraint because the code already supports this case.
-rw-r--r--cloudinit/config/cc_users_groups.py6
-rw-r--r--cloudinit/config/schemas/schema-cloud-config-v1.json3
-rw-r--r--tests/unittests/config/test_cc_users_groups.py4
-rw-r--r--tests/unittests/distros/test_user_data_normalize.py54
4 files changed, 38 insertions, 29 deletions
diff --git a/cloudinit/config/cc_users_groups.py b/cloudinit/config/cc_users_groups.py
index 52f0b844..d64cae9e 100644
--- a/cloudinit/config/cc_users_groups.py
+++ b/cloudinit/config/cc_users_groups.py
@@ -146,6 +146,12 @@ meta: MetaSchema = {
sudo: null
"""
),
+ dedent(
+ """\
+ # Avoid creating any ``default_user``.
+ users: []
+ """
+ ),
],
"frequency": PER_INSTANCE,
"activate_by_schema_keys": [],
diff --git a/cloudinit/config/schemas/schema-cloud-config-v1.json b/cloudinit/config/schemas/schema-cloud-config-v1.json
index 2a2d8631..3c2b90f9 100644
--- a/cloudinit/config/schemas/schema-cloud-config-v1.json
+++ b/cloudinit/config/schemas/schema-cloud-config-v1.json
@@ -3079,8 +3079,7 @@
"$ref": "#/$defs/users_groups.user"
}
]
- },
- "minItems": 1
+ }
}
}
},
diff --git a/tests/unittests/config/test_cc_users_groups.py b/tests/unittests/config/test_cc_users_groups.py
index 48f80ea8..635e0b63 100644
--- a/tests/unittests/config/test_cc_users_groups.py
+++ b/tests/unittests/config/test_cc_users_groups.py
@@ -358,7 +358,9 @@ class TestUsersGroupsSchema:
({"users": "oldstyle,default"}, does_not_raise(), None),
({"users": ["default"]}, does_not_raise(), None),
({"users": ["default", ["aaa", "bbb"]]}, does_not_raise(), None),
- # no default user creation
+ # no user creation at all
+ ({"users": []}, does_not_raise(), None),
+ # different default user creation
({"users": ["foobar"]}, does_not_raise(), None),
(
{"users": [{"name": "bbsw", "lock-passwd": True}]},
diff --git a/tests/unittests/distros/test_user_data_normalize.py b/tests/unittests/distros/test_user_data_normalize.py
index 67ea024b..fc9d72f1 100644
--- a/tests/unittests/distros/test_user_data_normalize.py
+++ b/tests/unittests/distros/test_user_data_normalize.py
@@ -44,7 +44,7 @@ class TestUGNormalize(TestCase):
{"bob": "users2"},
]
}
- (_users, groups) = self._norm(g, distro)
+ _users, groups = self._norm(g, distro)
self.assertIn("ubuntu", groups)
ub_members = groups["ubuntu"]
self.assertEqual(sorted(["foo", "bar"]), sorted(ub_members))
@@ -57,7 +57,7 @@ class TestUGNormalize(TestCase):
ug_cfg = {
"groups": ["bob"],
}
- (users, groups) = self._norm(ug_cfg, distro)
+ users, groups = self._norm(ug_cfg, distro)
self.assertIn("bob", groups)
self.assertEqual({}, users)
@@ -66,7 +66,7 @@ class TestUGNormalize(TestCase):
ug_cfg = {
"groups": "bob,joe,steve",
}
- (users, groups) = self._norm(ug_cfg, distro)
+ users, groups = self._norm(ug_cfg, distro)
self.assertIn("bob", groups)
self.assertIn("joe", groups)
self.assertIn("steve", groups)
@@ -75,7 +75,7 @@ class TestUGNormalize(TestCase):
def test_more_groups(self):
distro = self._make_distro("ubuntu")
ug_cfg = {"groups": ["bob", "joe", "steve"]}
- (users, groups) = self._norm(ug_cfg, distro)
+ users, groups = self._norm(ug_cfg, distro)
self.assertIn("bob", groups)
self.assertIn("joe", groups)
self.assertIn("steve", groups)
@@ -90,7 +90,7 @@ class TestUGNormalize(TestCase):
"steve": [],
}
}
- (users, groups) = self._norm(ug_cfg, distro)
+ users, groups = self._norm(ug_cfg, distro)
self.assertIn("bob", groups)
self.assertEqual(["s"], groups["bob"])
self.assertEqual([], groups["joe"])
@@ -105,21 +105,21 @@ class TestUGNormalize(TestCase):
"default": True,
}
}
- (users, _groups) = self._norm(ug_cfg, distro)
+ users, _groups = self._norm(ug_cfg, distro)
self.assertIn("bob", users)
ug_cfg = {
"users": {
"default": "yes",
}
}
- (users, _groups) = self._norm(ug_cfg, distro)
+ users, _groups = self._norm(ug_cfg, distro)
self.assertIn("bob", users)
ug_cfg = {
"users": {
"default": "1",
}
}
- (users, _groups) = self._norm(ug_cfg, distro)
+ users, _groups = self._norm(ug_cfg, distro)
self.assertIn("bob", users)
def test_users_simple_dict_no(self):
@@ -129,14 +129,14 @@ class TestUGNormalize(TestCase):
"default": False,
}
}
- (users, _groups) = self._norm(ug_cfg, distro)
+ users, _groups = self._norm(ug_cfg, distro)
self.assertEqual({}, users)
ug_cfg = {
"users": {
"default": "no",
}
}
- (users, _groups) = self._norm(ug_cfg, distro)
+ users, _groups = self._norm(ug_cfg, distro)
self.assertEqual({}, users)
def test_users_simple_csv(self):
@@ -144,7 +144,7 @@ class TestUGNormalize(TestCase):
ug_cfg = {
"users": "joe,bob",
}
- (users, _groups) = self._norm(ug_cfg, distro)
+ users, _groups = self._norm(ug_cfg, distro)
self.assertIn("joe", users)
self.assertIn("bob", users)
self.assertEqual({"default": False}, users["joe"])
@@ -155,29 +155,31 @@ class TestUGNormalize(TestCase):
ug_cfg = {
"users": ["joe", "bob"],
}
- (users, _groups) = self._norm(ug_cfg, distro)
+ users, _groups = self._norm(ug_cfg, distro)
self.assertIn("joe", users)
self.assertIn("bob", users)
self.assertEqual({"default": False}, users["joe"])
self.assertEqual({"default": False}, users["bob"])
+ users, _groups = self._norm({"users": []}, distro)
+ self.assertEqual({}, users)
def test_users_old_user(self):
distro = self._make_distro("ubuntu", bcfg)
ug_cfg = {"user": "zetta", "users": "default"}
- (users, _groups) = self._norm(ug_cfg, distro)
+ users, _groups = self._norm(ug_cfg, distro)
self.assertNotIn("bob", users) # Bob is not the default now, zetta is
self.assertIn("zetta", users)
self.assertTrue(users["zetta"]["default"])
self.assertNotIn("default", users)
ug_cfg = {"user": "zetta", "users": "default, joe"}
- (users, _groups) = self._norm(ug_cfg, distro)
+ users, _groups = self._norm(ug_cfg, distro)
self.assertNotIn("bob", users) # Bob is not the default now, zetta is
self.assertIn("joe", users)
self.assertIn("zetta", users)
self.assertTrue(users["zetta"]["default"])
self.assertNotIn("default", users)
ug_cfg = {"user": "zetta", "users": ["bob", "joe"]}
- (users, _groups) = self._norm(ug_cfg, distro)
+ users, _groups = self._norm(ug_cfg, distro)
self.assertIn("bob", users)
self.assertIn("joe", users)
self.assertIn("zetta", users)
@@ -189,7 +191,7 @@ class TestUGNormalize(TestCase):
"joe": True,
},
}
- (users, _groups) = self._norm(ug_cfg, distro)
+ users, _groups = self._norm(ug_cfg, distro)
self.assertIn("bob", users)
self.assertIn("joe", users)
self.assertIn("zetta", users)
@@ -197,10 +199,10 @@ class TestUGNormalize(TestCase):
ug_cfg = {
"user": "zetta",
}
- (users, _groups) = self._norm(ug_cfg, distro)
+ users, _groups = self._norm(ug_cfg, distro)
self.assertIn("zetta", users)
ug_cfg = {}
- (users, groups) = self._norm(ug_cfg, distro)
+ users, groups = self._norm(ug_cfg, distro)
self.assertEqual({}, users)
self.assertEqual({}, groups)
@@ -209,7 +211,7 @@ class TestUGNormalize(TestCase):
ug_cfg = {
"users": [{"name": "default", "blah": True}],
}
- (users, _groups) = self._norm(ug_cfg, distro)
+ users, _groups = self._norm(ug_cfg, distro)
self.assertIn("bob", users)
self.assertEqual(
",".join(distro.get_default_user()["groups"]),
@@ -225,7 +227,7 @@ class TestUGNormalize(TestCase):
"default",
],
}
- (users, _groups) = self._norm(ug_cfg, distro)
+ users, _groups = self._norm(ug_cfg, distro)
self.assertIn("bob", users)
(name, config) = ug_util.extract_default(users)
self.assertEqual(name, "bob")
@@ -252,7 +254,7 @@ class TestUGNormalize(TestCase):
"default",
],
}
- (users, _groups) = self._norm(ug_cfg, distro)
+ users, _groups = self._norm(ug_cfg, distro)
self.assertIn("bob", users)
self.assertEqual(
",".join(distro.get_default_user()["groups"]),
@@ -268,7 +270,7 @@ class TestUGNormalize(TestCase):
{"name": "bob"},
],
}
- (users, _groups) = self._norm(ug_cfg, distro)
+ users, _groups = self._norm(ug_cfg, distro)
self.assertIn("joe", users)
self.assertIn("bob", users)
self.assertEqual({"tr_me": True, "default": False}, users["joe"])
@@ -282,7 +284,7 @@ class TestUGNormalize(TestCase):
{"name": "bob"},
],
}
- (users, _groups) = self._norm(ug_cfg, distro)
+ users, _groups = self._norm(ug_cfg, distro)
self.assertIn("joe", users)
self.assertIn("bob", users)
self.assertEqual({"default": False}, users["joe"])
@@ -299,7 +301,7 @@ class TestUGNormalize(TestCase):
{"name": "joe", "snapuser": "joe@joe.com"},
],
}
- (users, _groups) = self._norm(ug_cfg, distro)
+ users, _groups = self._norm(ug_cfg, distro)
for (user, config) in users.items():
print("user=%s config=%s" % (user, config))
username = distro.create_user(user, **config)
@@ -319,7 +321,7 @@ class TestUGNormalize(TestCase):
{"name": "joe", "snapuser": "joe@joe.com", "known": True},
],
}
- (users, _groups) = self._norm(ug_cfg, distro)
+ users, _groups = self._norm(ug_cfg, distro)
for (user, config) in users.items():
print("user=%s config=%s" % (user, config))
username = distro.create_user(user, **config)
@@ -350,7 +352,7 @@ class TestUGNormalize(TestCase):
{"name": "joe", "groups": "users", "create_groups": True},
],
}
- (users, _groups) = self._norm(ug_cfg, distro)
+ users, _groups = self._norm(ug_cfg, distro)
for (user, config) in users.items():
print("user=%s config=%s" % (user, config))
distro.add_user(user, **config)