Commit Graph

117 Commits

Author SHA1 Message Date
Megan Marsh be5763ec41 move provisioner interface into sdk 2020-12-01 14:25:14 -08:00
Megan Marsh 19bdc8b49e fix conflicts 2020-11-30 14:34:20 -08:00
Megan Marsh 56a45b04ab Move hook and communicator definitions to packer-plugin-sdk 2020-11-30 14:30:30 -08:00
Megan Marsh c70870cb83 move multierror and multierrorappend into sdk 2020-11-30 14:29:06 -08:00
Megan Marsh 001886670d move Ui definition into the packer plugin sdk. 2020-11-30 14:26:54 -08:00
Adrien Delorme c5da8c5c37
Fix salt-masterless provisioner after merge conflict compilation error (#10296)
This is most likely due to the merge between #10291 and #10257 ( that moves WindowsOSType into guestexec.

This fixes #10291
2020-11-23 10:29:12 +01:00
Megan Marsh 7141dcfecb
Merge pull request #10201 from davewoodward/feature/windows-package-manager
Add calls to winrepo.update_git_repos and pkg.refresh_db
2020-11-20 15:48:42 -08:00
Megan Marsh f8f1ebf0c7 move version and useragent definitions into sdk 2020-11-18 11:42:02 -08:00
Megan Marsh 9e47696dff move helper/config to bundle with the other template definitions 2020-11-18 10:34:59 -08:00
Megan Marsh 7d658149ea update tests and website and generated partials to reflect new package format 2020-11-17 10:36:01 -08:00
Megan Marsh 6402362018 create packer-plugin-sdk directory and begin moving the relevant folders into it. 2020-11-13 10:47:36 -08:00
Megan Marsh 46cf8a1602 add all provisioner version files 2020-11-10 15:01:07 -08:00
Megan Marsh 8ecd16db81 regenerate code 2020-11-10 08:16:59 -08:00
Megan Marsh cd74456026
Common provisioner helpers (#10229)
* update docstrings to make it clear that plugins are servers and core is client

* move provisioner guest helper functions into common dir.
2020-11-09 12:16:44 +01:00
Dave Woodward 257439786c Remove brackets intended to scope usage of cmd variable and leverage unique variable names instead. 2020-11-03 10:39:51 -06:00
Dave Woodward 4152d527df Include download and installation of Git to satisfy the winrepo.update_git_repos prerequisite. Also removed unneeded p.sudo since we know we are working with Windows. 2020-11-02 21:27:11 -06:00
Dave Woodward 8a0aa68a4e Add calls to winrepo.update_git_repos and pkg.refresh_db if the operating system is Windows. 2020-10-31 20:26:33 -05:00
Megan Marsh c0ce8a9414 rework fixer deprecation code so we know what plugins they relate to 2020-10-21 15:28:59 -07:00
Andrew Cornies bde75c9a96 Updated implementation to go-getter/v2
go.mod update and go mod vendor

Signed-off-by: Andrew Cornies <acornies@gmail.com>
2020-08-10 09:41:44 -04:00
Andrew Cornies a704e1b6b1 Updated formula regexp to support ?ref= syntax.
Added formulas docs for salt-masterless provisioner

Signed-off-by: Andrew Cornies <acornies@gmail.com>
2020-08-07 18:38:41 -04:00
Megan Marsh 03220c0b94 fix linting. 2020-08-07 10:53:07 -07:00
Andrew Cornies 24739270cf Added Prepare tests around formula URLs
Signed-off-by: Andrew Cornies <acornies@gmail.com>
2020-08-06 14:48:25 -04:00
Andrew Cornies a2ea308881 URL format error checking
Signed-off-by: Andrew Cornies <acornies@gmail.com>
2020-08-06 14:02:45 -04:00
Andrew Cornies ab52d83fb0 Functional download of formulas using gogetter
Signed-off-by: Andrew Cornies <acornies@gmail.com>
2020-08-06 01:22:19 -04:00
Adrien Delorme 40947c2bf6
HCL2: generate hcl tags with go-cty tags too (#9306)
This will allow to generate the config files:

```go
package main

import (
	"fmt"

	"github.com/hashicorp/hcl/v2/gohcl"
	"github.com/hashicorp/hcl/v2/hclwrite"
	"github.com/hashicorp/packer/builder/alicloud/ecs"
)

func main() {
	name := "name"
	app := ecs.FlatConfig{
		AlicloudImageName: &name,
		ECSSystemDiskMapping: &ecs.FlatAlicloudDiskDevice{
			DiskName: &name,
		},
	}

	f := hclwrite.NewEmptyFile()
	block := gohcl.EncodeAsBlock(&app, `source "something" "something"`)
	f.Body().AppendBlock(block)
	fmt.Printf("%s", f.Bytes())
}

```

Will output:

```
source "something" "something" {
  packer_user_variables      = null
  packer_sensitive_variables = null
  image_name                 = "name"
  image_share_account        = null
  image_unshare_account      = null
  image_copy_regions         = null
  image_copy_names           = null
  tags                       = null
  tag                        = null
  system_disk_mapping        = { disk_category = null, disk_delete_with_instance = null, disk_descri
ption = null, disk_device = null, disk_encrypted = null, disk_name = "name", disk_size = null, disk_
snapshot_id = null }
  image_disk_mappings        = null
  ssh_remote_tunnels         = null
  ssh_local_tunnels          = null
  ssh_public_key             = null
  ssh_private_key            = null
}
```

This is a good first step for #9015 and #9282 

fix #9304
2020-05-28 11:19:00 +02:00
Adrien Delorme a2e9439ee6
provisioner/salt-masterless: ignore the CmdArgs field in hcl2 (#9290)
fix #9233
2020-05-26 16:46:31 +02:00
DamianBis b679f61536
Update to make NoExitOnFailure work correctly. (#9119)
if NoExitOnFailure is true then ignore the error returned from salt.
2020-04-27 10:48:19 +02:00
Adrien Delorme 840e67f775
HCL2: when we see a map generate an attribute spec instead of a block spec (#9035)
* mapstructure-to-hcl2: when we see a map generate an attribute spec and not a block spec

this will alow to do

tags = {
 key = "value"
}

instead of

tags {
  key = "value"
}

This will also enable using variables directly for those tags

* generate code

* update tests
2020-04-14 16:05:13 +02:00
Adrien Delorme 4b7132c87c Merge remote-tracking branch 'origin/master' into sharing_info 2019-12-17 11:57:09 +01:00
Adrien Delorme 0785c2f6fc
build using HCL2 (#8423)
This follows #8232 which added the code to generate the code required to parse
HCL files for each packer component.

All old config files of packer will keep on working the same. Packer takes one
argument. When a directory is passed, all files in the folder with a name
ending with  “.pkr.hcl” or “.pkr.json” will be parsed using the HCL2 format.
When a file ending with “.pkr.hcl” or “.pkr.json” is passed it will be parsed
using the HCL2 format. For every other case; the old packer style will be used.

## 1. the hcl2template pkg can create a packer.Build from a set of HCL (v2) files

I had to make the packer.coreBuild (which is our one and only packer.Build ) a public struct with public fields

## 2. Components interfaces get a new ConfigSpec Method to read a file from an HCL file.

  This is a breaking change for packer plugins.

a packer component can be a: builder/provisioner/post-processor

each component interface now gets a `ConfigSpec() hcldec.ObjectSpec`
which allows packer to tell what is the layout of the hcl2 config meant
to configure that specific component.

This ObjectSpec is sent through the wire (RPC) and a cty.Value is now
sent through the already existing configuration entrypoints:

 Provisioner.Prepare(raws ...interface{}) error
 Builder.Prepare(raws ...interface{}) ([]string, error)
 PostProcessor.Configure(raws ...interface{}) error

close #1768


Example hcl files:

```hcl
// file amazon-ebs-kms-key/run.pkr.hcl
build {
    sources = [
        "source.amazon-ebs.first",
    ]

    provisioner "shell" {
        inline = [
            "sleep 5"
        ]
    }

    post-processor "shell-local" {
        inline = [
            "sleep 5"
        ]
    }
}

// amazon-ebs-kms-key/source.pkr.hcl

source "amazon-ebs" "first" {

    ami_name = "hcl2-test"
    region = "us-east-1"
    instance_type = "t2.micro"

    kms_key_id = "c729958f-c6ba-44cd-ab39-35ab68ce0a6c"
    encrypt_boot = true
    source_ami_filter {
        filters {
          virtualization-type = "hvm"
          name =  "amzn-ami-hvm-????.??.?.????????-x86_64-gp2"
          root-device-type = "ebs"
        }
        most_recent = true
        owners = ["amazon"]
    }
    launch_block_device_mappings {
        device_name = "/dev/xvda"
        volume_size = 20
        volume_type = "gp2"
        delete_on_termination = "true"
    }
    launch_block_device_mappings {
        device_name = "/dev/xvdf"
        volume_size = 500
        volume_type = "gp2"
        delete_on_termination = true
        encrypted = true
    }

    ami_regions = ["eu-central-1"]
    run_tags {
        Name = "packer-solr-something"
        stack-name = "DevOps Tools"
    }
    
    communicator = "ssh"
    ssh_pty = true
    ssh_username = "ec2-user"
    associate_public_ip_address = true
}
```
2019-12-17 11:25:56 +01:00
Megan Marsh 39fd462b56 change all provision func signatures to use map[string]interface{} 2019-12-12 15:38:32 -08:00
Megan Marsh 6f418d0e54 get data sharing to a working state with the powershell provisioner 2019-12-11 15:43:38 -08:00
Megan Marsh f4c3501af5 pass struct of generated data into provision() call 2019-12-11 15:43:38 -08:00
Adrien Delorme 078ba7c8c3 commit old code generation tool
for history
2019-10-15 12:56:42 +02:00
David Hao c6a471d149 [Salt] Replace scp with scp + mv to handle non-root case 2019-07-02 18:06:04 -04:00
David Z Hao 1d4750a2d9
DisableSudo, not PreventSudo 2019-06-20 13:39:51 -04:00
David Z Hao ea238b66c0
Make salt-masterless provisioner respect disable_sudo directive for all commands 2019-06-19 18:50:16 -04:00
Adrien Delorme f555e7a9f2 allow a provisioner to timeout
* I had to contextualise Communicator.Start and RemoteCmd.StartWithUi
NOTE: Communicator.Start starts a RemoteCmd but RemoteCmd.StartWithUi will run the cmd and wait for a return, so I renamed StartWithUi to RunWithUi so that the intent is clearer.
Ideally in the future RunWithUi will be named back to StartWithUi and the exit status or wait funcs of the command will allow to wait for a return. If you do so please read carrefully https://golang.org/pkg/os/exec/#Cmd.Stdout to avoid a deadlock
* cmd.ExitStatus to cmd.ExitStatus() is now blocking to avoid race conditions
* also had to simplify StartWithUi
2019-04-08 20:09:21 +02:00
Adrien Delorme c7ce4d598e change Provisioner to be passed a context for cancellation 2019-04-03 15:55:54 +02:00
Megan Marsh 414dd80e61
Merge pull request #6013 from jsoref/spelling
Spelling
2018-03-14 09:50:27 -07:00
Megan Marsh b33d6ce82e fix salt provisioner on linux 2018-03-13 16:13:23 -07:00
Josh Soref 684a3f5d8a spelling: custom 2018-03-13 07:26:33 +00:00
Matthew Hooker ebe995c0ff
run goimports 2018-01-22 17:21:10 -08:00
Dave Sanderson fc566a3cb4 Added test for new commands and guest os type 2017-12-13 11:16:21 -07:00
Dave Sanderson 284b069003 Fixed stating of files on windows
added directory existence check to salt provisioner before directory clean up
2017-12-13 10:20:27 -07:00
Dave Sanderson 57770de36f revert file stat 2017-12-12 16:01:00 -07:00
Dave Sanderson aee67d3933 Add ability to move files on remote system
Fix salt-masterless to use generic MovePath
2017-12-12 15:22:10 -07:00
Dave Sanderson 857e5d04d3 Fix command error for salt install 2017-12-12 15:11:29 -07:00
Dave Sanderson 666796e8eb Add ability to stat a remote path 2017-12-12 14:39:13 -07:00
Dave Sanderson 630b7466d6 updated test to remove old DefaultTmpDir reference
Fixed sudo logic
Fixed error message format issue for OSType check
2017-12-12 11:49:10 -07:00