Merge pull request #3891 from nouney/f-generated-files

Add "generated" file tag to allow users to upload files created on the fly.
This commit is contained in:
M. Marsh 2018-04-05 16:08:38 -07:00 committed by GitHub
commit 56dd8cdb63
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 2 deletions

View File

@ -26,6 +26,9 @@ type Config struct {
// Direction
Direction string
// False if the sources have to exist.
Generated bool
ctx interpolate.Context
}
@ -61,7 +64,7 @@ func (p *Provisioner) Prepare(raws ...interface{}) error {
if p.config.Direction == "upload" {
for _, src := range p.config.Sources {
if _, err := os.Stat(src); err != nil {
if _, err := os.Stat(src); p.config.Generated == false && err != nil {
errs = packer.MultiErrorAppend(errs,
fmt.Errorf("Bad source '%s': %s", src, err))
}

View File

@ -45,6 +45,12 @@ func TestProvisionerPrepare_InvalidSource(t *testing.T) {
if err == nil {
t.Fatalf("should require existing file")
}
config["generated"] = false
err = p.Prepare(config)
if err == nil {
t.Fatalf("should required existing file")
}
}
func TestProvisionerPrepare_ValidSource(t *testing.T) {
@ -58,11 +64,28 @@ func TestProvisionerPrepare_ValidSource(t *testing.T) {
config := testConfig()
config["source"] = tf.Name()
err = p.Prepare(config)
if err != nil {
t.Fatalf("should allow valid file: %s", err)
}
config["generated"] = false
err = p.Prepare(config)
if err != nil {
t.Fatalf("should allow valid file: %s", err)
}
}
func TestProvisionerPrepare_GeneratedSource(t *testing.T) {
var p Provisioner
config := testConfig()
config["source"] = "/this/should/not/exist"
config["generated"] = true
err := p.Prepare(config)
if err != nil {
t.Fatalf("should allow non-existing file: %s", err)
}
}
func TestProvisionerPrepare_EmptyDestination(t *testing.T) {

View File

@ -48,6 +48,9 @@ The available configuration options are listed below. All elements are required.
"upload". If it is set to "download" then the file "source" in the machine
will be downloaded locally to "destination"
- `generated` (boolean) - If true, check the file existence only before uploading.
This allows to upload files created on-the-fly. This defaults to false.
## Directory Uploads
The file provisioner is also able to upload a complete directory to the remote