Merge pull request #226214 from leon-barrett/leon-make-disk-image-dir

nixos/make-disk-image: fix contents dir paths

Changed files
+36 -11
nixos
doc
manual
release-notes
lib
tests
+2
nixos/doc/manual/release-notes/rl-2305.section.md
···
- The `bind` module now allows the per-zone `allow-query` setting to be configured (previously it was hard-coded to `any`; it still defaults to `any` to retain compatibility).
+
- `make-disk-image` handles `contents` arguments that are directories better, fixing a bug where it used to put them in a subdirectory of the intended `target`.
+
## Detailed migration information {#sec-release-23.05-migration}
### Pipewire configuration overrides {#sec-release-23.05-migration-pipewire}
+8 -3
nixos/lib/make-disk-image.nix
···
done
else
mkdir -p $root/$(dirname $target)
-
if ! [ -e $root/$target ]; then
-
rsync $rsync_flags $source $root/$target
-
else
+
if [ -e $root/$target ]; then
echo "duplicate entry $target -> $source"
exit 1
+
elif [ -d $source ]; then
+
# Append a slash to the end of source to get rsync to copy the
+
# directory _to_ the target instead of _inside_ the target.
+
# (See `man rsync`'s note on a trailing slash.)
+
rsync $rsync_flags $source/ $root/$target
+
else
+
rsync $rsync_flags $source $root/$target
fi
fi
done
+8 -1
nixos/tests/common/ec2.nix
···
ln -s ${pkgs.writeText "sshPublicKey" sshPublicKey} $out/1.0/meta-data/public-keys/0/openssh-key
'';
};
+
indentLines = str: concatLines (map (s: " " + s) (splitString "\n" str));
in makeTest {
name = "ec2-" + name;
nodes = {};
···
"qemu-img",
"create",
"-f",
+
"qcow2",
+
"-F",
"qcow2",
"-o",
"backing_file=${image}",
···
)
machine = create_machine({"startCommand": start_command})
-
'' + script;
+
try:
+
'' + indentLines script + ''
+
finally:
+
machine.shutdown()
+
'';
inherit meta;
};
+18 -7
nixos/tests/image-contents.nix
···
inherit pkgs config;
lib = pkgs.lib;
format = "qcow2";
-
contents = [{
-
source = pkgs.writeText "testFile" "contents";
-
target = "/testFile";
-
user = "1234";
-
group = "5678";
-
mode = "755";
-
}];
+
contents = [
+
{
+
source = pkgs.writeText "testFile" "contents";
+
target = "/testFile";
+
user = "1234";
+
group = "5678";
+
mode = "755";
+
}
+
{
+
source = ./.;
+
target = "/testDir";
+
}
+
];
}) + "/nixos.qcow2";
in makeEc2Test {
···
userData = null;
script = ''
machine.start()
+
# Test that if contents includes a file, it is copied to the target.
assert "content" in machine.succeed("cat /testFile")
fileDetails = machine.succeed("ls -l /testFile")
assert "1234" in fileDetails
assert "5678" in fileDetails
assert "rwxr-xr-x" in fileDetails
+
+
# Test that if contents includes a directory, it is copied to the target.
+
dirList = machine.succeed("ls /testDir")
+
assert "image-contents.nix" in dirList
'';
}