-
Notifications
You must be signed in to change notification settings - Fork 22
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CopyFile: support assets, archives, and recursive copying #423
base: master
Are you sure you want to change the base?
Conversation
1d6106b
to
96cfa51
Compare
ee19349
to
c8c200f
Compare
a919ac1
to
33e531d
Compare
33e531d
to
0b11dc3
Compare
} | ||
defer local.Close() | ||
|
||
remote, err := sftp.Create(dst) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What if the parents of dst do not exist?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When copyFile
is called from our copyDir
, that shouldn't be possible.
When it's called directly because the user wants to copy a file, one could argue that it should fail because the user asked to copy to a non-existant location. It's one of the questions in my (internal) ideation doc.
df31734
to
3fcd01d
Compare
3fcd01d
to
aa1732b
Compare
ff306a2
to
8110a0d
Compare
72c9b7b
to
4da0d5e
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks pretty good to me.
Co-authored-by: Ian Wahbe <[email protected]>
Asset *asset.Asset `pulumi:"asset,optional"` | ||
Archive *archive.Archive `pulumi:"archive,optional"` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why are these defined as two properties rather than just having the Asset
field?
AFAIK, when a property is of type Asset
, that automatically allows the user to pass in an Archive
. You can see this in the SDK when your Asset
fields actually get generated with the type AssetOrArchive
. This whole heirarchy of types is somewhat confusing for users, but I think it makes it superfluous to include both fields.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oooh interesting! I just looked at the definitions of Asset
and Archive
and saw that they're separate.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, the design of Assets overall is pretty confusing on both the provider and consumer sides 🤷
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This works a bit differently because it's using raw property values rather than the new framework. Perhaps this is a missing feature in the go-provider to detect which kind of asset we've got at runtime?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I guess the question is also: what's the difference between the asset/archive types in sdk/v3/go/common/resource and sdk/v3/go/pulumi
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This discussion led to filing pulumi/pulumi-go-provider#237
This PR allows the CopyFile resource to recursively copy directories as well, similar to
scp -r
.This PR enhances the CopyFile resource in a few ways.
In light of these changes, I've renamed
CopyFile
to justCopy
which is a breaking change.Resolves #23
Resolves #33
Resolves #42
TODO
The current implementation fails as soon as a file or directory already exists on the remote, like the previousCopyFile
.CopyFile
toCopy
orRemoteCopy
or insert your proposal here?TestEc2RemoteTs
, which we should share instead. What would be a good way to do that, given the code is in the TS tests, not in the Go driver?Design considerations
The behavior of the copy operation was modeled after
cp
andscp
.Specifically:
Implementation notes
size.ts
file in both steps of the integration test is useless because it always has the same value. However, I found that without a TS file present in the additional step, it would not be run. Haven't debugged further.