hashicorp / hashicorp/packer-plugin-docker

Automatically create parent folders for files in Windows containers-

Open
#208 0 comments 0 reactions 0 assignees View on GitHub
enhancement
Dominant language
Go
Stars
40
Forks
29
PR merge metrics
No merged PRs in 30d

Description

Please search the existing issues for relevant feature requests, and use the
reaction feature
(https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/)
to add upvotes to pre-existing requests.

#### Community Note

Please vote on this issue by adding a 👍 [reaction](https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/) to the original issue to help the community and maintainers prioritize this request.
Please do not leave "+1" or "me too" comments, they generate extra noise for issue followers and do not help prioritize the request.
If you are interested in working on this issue or have submitted a pull request, please leave a comment.

#### Description

We currently use Packer to create Linux and Windows VM images using the `vsphere_clone` builder. Now we want to create container images using these same Packer files. This already works with a few small changes for the Linux Containers. However, we are currently having trouble with the Windows containers.

When building the Windows VMs, we heavily rely on the `powershell` provisioner. For this provisioner, we define both the `remote_path` and the `remote_env_var_path` with a path to a file for which the parent folder does not exist at the start of the provisioner. This works with the `vsphere_clone` builder using the `winrm` operator. The missing folders in the path chain are simply created. The same goes for the `file` provisioner. If we give it a destination path that does not yet exist, it simply gets created. The same also seems to go for the `file` provisioner when building Linux containers; the path is created due to how `docker cp` [behaves](https://docs.docker.com/reference/cli/docker/container/cp/).

According to the documentation, the difference in behavior for the `file` provisioner when building Linux vs. Windows containers is due to `docker cp` not properly working for Windows containers and therefore PowerShell commands being used as a workaround. It looks like the [`Upload` function](https://github.com/hashicorp/packer-plugin-docker/blob/29ef3cb994a5956854f31f5d08c98ca9984075d6/builder/docker/windows_container_communicator.go#L32) of the Windows communicator could be modified to create the parent folder before uploading/copying the file from the temp volume. Therefore, would it be of interest to the plugin if such an (optional) feature that automatically creates the missing folders would be implemented?

#### Use Case(s)

Allow easier transition from VM builders such as the `vsphere_clone` to this container builder. Additionally, reduce behavioral differences when execution the `file` provisioner between Linux and Windows containers.

#### Potential configuration

Although I do not currently see a use case for relying on the parent folder not being created, we could create a new configuration option in order to not break such cases:

```hcl
source "docker" "windows" {
image = "microsoft/windowsservercore:1709"
windows_container = true
windows_create_parent_dirs = true
}
```

If the configuration option `windows_create_parent_dirs` is set to true, the Windows communicator would create the parent directories during its `Upload` or `UploadDir`.

#### Potential References

https://github.com/hashicorp/packer-plugin-docker/blob/main/docs/builders/docker.mdx#docker-for-windows

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.