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

nixos/make-disk-image: fix contents dir paths
This commit is contained in:
Ryan Lahfa 2023-04-16 21:49:09 +02:00 committed by GitHub
commit 6bf4cde63f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 36 additions and 11 deletions

View File

@ -423,6 +423,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- 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}

View File

@ -402,11 +402,16 @@ let format' = format; in let
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

View File

@ -17,6 +17,7 @@ with pkgs.lib;
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 = {};
@ -36,6 +37,8 @@ with pkgs.lib;
"create",
"-f",
"qcow2",
"-F",
"qcow2",
"-o",
"backing_file=${image}",
disk_image,
@ -59,7 +62,11 @@ with pkgs.lib;
)
machine = create_machine({"startCommand": start_command})
'' + script;
try:
'' + indentLines script + ''
finally:
machine.shutdown()
'';
inherit meta;
};

View File

@ -27,13 +27,19 @@ let
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 {
@ -42,10 +48,15 @@ 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
'';
}