Merge pull request #25148 from obsidiansystems/docker-dirlinks

dockerTools: optionally preserve directory symlinks
This commit is contained in:
Ryan Trinkle 2018-04-09 17:44:09 -04:00 committed by GitHub
commit 1034aa8e9c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -249,6 +249,10 @@ rec {
baseJson, baseJson,
# Files to add to the layer. # Files to add to the layer.
contents ? null, contents ? null,
# When copying the contents into the image, preserve symlinks to
# directories (see `rsync -K`). Otherwise, transform those symlinks
# into directories.
keepContentsDirlinks ? false,
# Additional commands to run on the layer before it is tar'd up. # Additional commands to run on the layer before it is tar'd up.
extraCommands ? "", uid ? 0, gid ? 0 extraCommands ? "", uid ? 0, gid ? 0
}: }:
@ -262,7 +266,7 @@ rec {
echo "Adding contents..." echo "Adding contents..."
for item in $contents; do for item in $contents; do
echo "Adding $item" echo "Adding $item"
rsync -ak --chown=0:0 $item/ layer/ rsync -a${if keepContentsDirlinks then "K" else "k"} --chown=0:0 $item/ layer/
done done
else else
echo "No contents to add to layer." echo "No contents to add to layer."
@ -303,6 +307,10 @@ rec {
runAsRoot, runAsRoot,
# Files to add to the layer. If null, an empty layer will be created. # Files to add to the layer. If null, an empty layer will be created.
contents ? null, contents ? null,
# When copying the contents into the image, preserve symlinks to
# directories (see `rsync -K`). Otherwise, transform those symlinks
# into directories.
keepContentsDirlinks ? false,
# JSON containing configuration and metadata for this layer. # JSON containing configuration and metadata for this layer.
baseJson, baseJson,
# Existing image onto which to append the new layer. # Existing image onto which to append the new layer.
@ -327,7 +335,7 @@ rec {
echo "Adding contents..." echo "Adding contents..."
for item in ${toString contents}; do for item in ${toString contents}; do
echo "Adding $item..." echo "Adding $item..."
rsync -ak --chown=0:0 $item/ layer/ rsync -a${if keepContentsDirlinks then "K" else "k"} --chown=0:0 $item/ layer/
done done
chmod ug+w layer chmod ug+w layer
@ -391,6 +399,10 @@ rec {
fromImageTag ? null, fromImageTag ? null,
# Files to put on the image (a nix store path or list of paths). # Files to put on the image (a nix store path or list of paths).
contents ? null, contents ? null,
# When copying the contents into the image, preserve symlinks to
# directories (see `rsync -K`). Otherwise, transform those symlinks
# into directories.
keepContentsDirlinks ? false,
# Docker config; e.g. what command to run on the container. # Docker config; e.g. what command to run on the container.
config ? null, config ? null,
# Optional bash script to run on the files prior to fixturizing the layer. # Optional bash script to run on the files prior to fixturizing the layer.
@ -417,11 +429,12 @@ rec {
if runAsRoot == null if runAsRoot == null
then mkPureLayer { then mkPureLayer {
name = baseName; name = baseName;
inherit baseJson contents extraCommands uid gid; inherit baseJson contents keepContentsDirlinks extraCommands uid gid;
} else mkRootLayer { } else mkRootLayer {
name = baseName; name = baseName;
inherit baseJson fromImage fromImageName fromImageTag inherit baseJson fromImage fromImageName fromImageTag
contents runAsRoot diskSize extraCommands; contents keepContentsDirlinks runAsRoot diskSize
extraCommands;
}; };
result = runCommand "docker-image-${baseName}.tar.gz" { result = runCommand "docker-image-${baseName}.tar.gz" {
buildInputs = [ jshon pigz coreutils findutils jq ]; buildInputs = [ jshon pigz coreutils findutils jq ];