diff --git a/builder/openstack/artifact_test.go b/builder/openstack/artifact_test.go
deleted file mode 100644
index 180906ef3..000000000
--- a/builder/openstack/artifact_test.go
+++ /dev/null
@@ -1,62 +0,0 @@
-package openstack
-
-import (
- "testing"
-
- packersdk "github.com/hashicorp/packer-plugin-sdk/packer"
-)
-
-func TestArtifact_Impl(t *testing.T) {
- var _ packersdk.Artifact = new(Artifact)
-}
-
-func TestArtifactId(t *testing.T) {
- expected := `b8cdf55b-c916-40bd-b190-389ec144c4ed`
-
- a := &Artifact{
- ImageId: "b8cdf55b-c916-40bd-b190-389ec144c4ed",
- }
-
- result := a.Id()
- if result != expected {
- t.Fatalf("bad: %s", result)
- }
-}
-
-func TestArtifactString(t *testing.T) {
- expected := "An image was created: b8cdf55b-c916-40bd-b190-389ec144c4ed"
-
- a := &Artifact{
- ImageId: "b8cdf55b-c916-40bd-b190-389ec144c4ed",
- }
- result := a.String()
- if result != expected {
- t.Fatalf("bad: %s", result)
- }
-}
-
-func TestArtifactState_StateData(t *testing.T) {
- expectedData := "this is the data"
- artifact := &Artifact{
- StateData: map[string]interface{}{"state_data": expectedData},
- }
-
- // Valid state
- result := artifact.State("state_data")
- if result != expectedData {
- t.Fatalf("Bad: State data was %s instead of %s", result, expectedData)
- }
-
- // Invalid state
- result = artifact.State("invalid_key")
- if result != nil {
- t.Fatalf("Bad: State should be nil for invalid state data name")
- }
-
- // Nil StateData should not fail and should return nil
- artifact = &Artifact{}
- result = artifact.State("key")
- if result != nil {
- t.Fatalf("Bad: State should be nil for nil StateData")
- }
-}
diff --git a/builder/openstack/builder_test.go b/builder/openstack/builder_test.go
deleted file mode 100644
index 15ed1c37c..000000000
--- a/builder/openstack/builder_test.go
+++ /dev/null
@@ -1,30 +0,0 @@
-package openstack
-
-import (
- "testing"
-
- packersdk "github.com/hashicorp/packer-plugin-sdk/packer"
-)
-
-func TestBuilder_ImplementsBuilder(t *testing.T) {
- var raw interface{}
- raw = &Builder{}
- if _, ok := raw.(packersdk.Builder); !ok {
- t.Fatalf("Builder should be a builder")
- }
-}
-
-func TestBuilder_Prepare_BadType(t *testing.T) {
- b := &Builder{}
- c := map[string]interface{}{
- "password": []string{},
- }
-
- _, warns, err := b.Prepare(c)
- if len(warns) > 0 {
- t.Fatalf("bad: %#v", warns)
- }
- if err == nil {
- t.Fatalf("prepare should fail")
- }
-}
diff --git a/builder/openstack/image_config_test.go b/builder/openstack/image_config_test.go
deleted file mode 100644
index 4d81ecd94..000000000
--- a/builder/openstack/image_config_test.go
+++ /dev/null
@@ -1,23 +0,0 @@
-package openstack
-
-import (
- "testing"
-)
-
-func testImageConfig() *ImageConfig {
- return &ImageConfig{
- ImageName: "foo",
- }
-}
-
-func TestImageConfigPrepare_Region(t *testing.T) {
- c := testImageConfig()
- if err := c.Prepare(nil); err != nil {
- t.Fatalf("shouldn't have err: %s", err)
- }
-
- c.ImageName = ""
- if err := c.Prepare(nil); err == nil {
- t.Fatal("should have error")
- }
-}
diff --git a/builder/openstack/networks_test.go b/builder/openstack/networks_test.go
deleted file mode 100644
index fe0a591ea..000000000
--- a/builder/openstack/networks_test.go
+++ /dev/null
@@ -1,54 +0,0 @@
-package openstack
-
-import (
- "net"
- "testing"
-)
-
-func testYes(t *testing.T, a, b string) {
- var m, n *net.IPNet
- _, m, _ = net.ParseCIDR(a)
- _, n, _ = net.ParseCIDR(b)
- if !containsNet(m, n) {
- t.Errorf("%s expected to contain %s", m, n)
- }
-}
-
-func testNot(t *testing.T, a, b string) {
- var m, n *net.IPNet
- _, m, _ = net.ParseCIDR(a)
- _, n, _ = net.ParseCIDR(b)
- if containsNet(m, n) {
- t.Errorf("%s expected to not contain %s", m, n)
- }
-}
-
-func TestNetworkDiscovery_SubnetContainsGood_IPv4(t *testing.T) {
- testYes(t, "192.168.0.0/23", "192.168.0.0/24")
- testYes(t, "192.168.0.0/24", "192.168.0.0/24")
- testNot(t, "192.168.0.0/25", "192.168.0.0/24")
-
- testYes(t, "192.168.101.202/16", "192.168.202.101/16")
- testNot(t, "192.168.101.202/24", "192.168.202.101/24")
- testNot(t, "192.168.202.101/24", "192.168.101.202/24")
-
- testYes(t, "0.0.0.0/0", "192.168.0.0/24")
- testYes(t, "0.0.0.0/0", "0.0.0.0/1")
- testNot(t, "192.168.0.0/24", "0.0.0.0/0")
- testNot(t, "0.0.0.0/1", "0.0.0.0/0")
-}
-
-func TestNetworkDiscovery_SubnetContainsGood_IPv6(t *testing.T) {
- testYes(t, "2001:db8::/63", "2001:db8::/64")
- testYes(t, "2001:db8::/64", "2001:db8::/64")
- testNot(t, "2001:db8::/65", "2001:db8::/64")
-
- testYes(t, "2001:db8:fefe:b00b::/32", "2001:db8:b00b:fefe::/32")
- testNot(t, "2001:db8:fefe:b00b::/64", "2001:db8:b00b:fefe::/64")
- testNot(t, "2001:db8:b00b:fefe::/64", "2001:db8:fefe:b00b::/64")
-
- testYes(t, "::/0", "2001:db8::/64")
- testYes(t, "::/0", "::/1")
- testNot(t, "2001:db8::/64", "::/0")
- testNot(t, "::/1", "::/0")
-}
diff --git a/builder/openstack/run_config_test.go b/builder/openstack/run_config_test.go
deleted file mode 100644
index af14715dc..000000000
--- a/builder/openstack/run_config_test.go
+++ /dev/null
@@ -1,284 +0,0 @@
-package openstack
-
-import (
- "os"
- "regexp"
- "testing"
-
- "github.com/gophercloud/gophercloud/openstack/imageservice/v2/images"
- "github.com/hashicorp/packer-plugin-sdk/communicator"
- "github.com/mitchellh/mapstructure"
-)
-
-func init() {
- // Clear out the openstack env vars so they don't
- // affect our tests.
- os.Setenv("SDK_USERNAME", "")
- os.Setenv("SDK_PASSWORD", "")
- os.Setenv("SDK_PROVIDER", "")
-}
-
-func testRunConfig() *RunConfig {
- return &RunConfig{
- SourceImage: "abcd",
- Flavor: "m1.small",
-
- Comm: communicator.Config{
- SSH: communicator.SSH{
- SSHUsername: "foo",
- },
- },
- }
-}
-
-func TestRunConfigPrepare(t *testing.T) {
- c := testRunConfig()
- err := c.Prepare(nil)
- if len(err) > 0 {
- t.Fatalf("err: %s", err)
- }
-}
-
-func TestRunConfigPrepare_InstanceType(t *testing.T) {
- c := testRunConfig()
- c.Flavor = ""
- if err := c.Prepare(nil); len(err) != 1 {
- t.Fatalf("err: %s", err)
- }
-}
-
-func TestRunConfigPrepare_SourceImage(t *testing.T) {
- c := testRunConfig()
- c.SourceImage = ""
- if err := c.Prepare(nil); len(err) != 1 {
- t.Fatalf("err: %s", err)
- }
-}
-
-func TestRunConfigPrepare_SSHPort(t *testing.T) {
- c := testRunConfig()
- c.Comm.SSHPort = 0
- if err := c.Prepare(nil); len(err) != 0 {
- t.Fatalf("err: %s", err)
- }
-
- if c.Comm.SSHPort != 22 {
- t.Fatalf("invalid value: %d", c.Comm.SSHPort)
- }
-
- c.Comm.SSHPort = 44
- if err := c.Prepare(nil); len(err) != 0 {
- t.Fatalf("err: %s", err)
- }
-
- if c.Comm.SSHPort != 44 {
- t.Fatalf("invalid value: %d", c.Comm.SSHPort)
- }
-}
-
-func TestRunConfigPrepare_BlockStorage(t *testing.T) {
- c := testRunConfig()
- c.UseBlockStorageVolume = true
- c.VolumeType = "fast"
- if err := c.Prepare(nil); len(err) != 0 {
- t.Fatalf("err: %s", err)
- }
- if c.VolumeType != "fast" {
- t.Fatalf("invalid value: %s", c.VolumeType)
- }
-
- c.AvailabilityZone = "RegionTwo"
- if err := c.Prepare(nil); len(err) != 0 {
- t.Fatalf("err: %s", err)
- }
-
- if c.VolumeAvailabilityZone != "RegionTwo" {
- t.Fatalf("invalid value: %s", c.VolumeAvailabilityZone)
- }
-
- c.VolumeAvailabilityZone = "RegionOne"
- if err := c.Prepare(nil); len(err) != 0 {
- t.Fatalf("err: %s", err)
- }
-
- if c.VolumeAvailabilityZone != "RegionOne" {
- t.Fatalf("invalid value: %s", c.VolumeAvailabilityZone)
- }
-
- c.VolumeName = "PackerVolume"
- if c.VolumeName != "PackerVolume" {
- t.Fatalf("invalid value: %s", c.VolumeName)
- }
-}
-
-func TestRunConfigPrepare_FloatingIPPoolCompat(t *testing.T) {
- c := testRunConfig()
- c.FloatingIPPool = "uuid1"
- if err := c.Prepare(nil); len(err) != 0 {
- t.Fatalf("err: %s", err)
- }
-
- if c.FloatingIPNetwork != "uuid1" {
- t.Fatalf("invalid value: %s", c.FloatingIPNetwork)
- }
-
- c.FloatingIPNetwork = "uuid2"
- c.FloatingIPPool = "uuid3"
- if err := c.Prepare(nil); len(err) != 0 {
- t.Fatalf("err: %s", err)
- }
-
- if c.FloatingIPNetwork != "uuid2" {
- t.Fatalf("invalid value: %s", c.FloatingIPNetwork)
- }
-}
-
-func TestRunConfigPrepare_ExternalSourceImageURL(t *testing.T) {
- c := testRunConfig()
- // test setting both ExternalSourceImageURL and SourceImage causes an error
- c.ExternalSourceImageURL = "http://example.com/image.qcow2"
- if err := c.Prepare(nil); len(err) != 1 {
- t.Fatalf("err: %s", err)
- }
-
- c = testRunConfig()
- // test setting both ExternalSourceImageURL and SourceImageName causes an error
- c.SourceImage = ""
- c.SourceImageName = "abcd"
- c.ExternalSourceImageURL = "http://example.com/image.qcow2"
- if err := c.Prepare(nil); len(err) != 1 {
- t.Fatalf("err: %s", err)
- }
-
- c = testRunConfig()
- // test neither setting SourceImage, SourceImageName or ExternalSourceImageURL causes an error
- c.SourceImage = ""
- c.SourceImageName = ""
- c.ExternalSourceImageURL = ""
- if err := c.Prepare(nil); len(err) != 1 {
- t.Fatalf("err: %s", err)
- }
-
- c = testRunConfig()
- // test setting only ExternalSourceImageURL passes
- c.SourceImage = ""
- c.SourceImageName = ""
- c.ExternalSourceImageURL = "http://example.com/image.qcow2"
- if err := c.Prepare(nil); len(err) != 0 {
- t.Fatalf("err: %s", err)
- }
-
- // test default values
- if c.ExternalSourceImageFormat != "qcow2" {
- t.Fatalf("ExternalSourceImageFormat should have been set to default: qcow2")
- }
-
- p := `packer_[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}`
- if matches, _ := regexp.MatchString(p, c.SourceImageName); !matches {
- t.Fatalf("invalid format for SourceImageName: %s", c.SourceImageName)
- }
-
- c = testRunConfig()
- // test setting a filter passes
- c.SourceImage = ""
- c.SourceImageName = ""
- c.ExternalSourceImageURL = ""
- c.SourceImageFilters = ImageFilter{
- Filters: ImageFilterOptions{
- Name: "Ubuntu 16.04",
- Visibility: "public",
- Owner: "1234567890",
- Tags: []string{"prod", "ready"},
- Properties: map[string]string{"os_distro": "ubuntu", "os_version": "16.04"},
- },
- MostRecent: true,
- }
-
- if err := c.Prepare(nil); len(err) != 0 {
- t.Fatalf("Should not error if everything but filter is empty: %s", err)
- }
-
-}
-
-// This test case confirms that only allowed fields will be set to values
-// The checked values are non-nil for their target type
-func TestBuildImageFilter(t *testing.T) {
-
- filters := ImageFilterOptions{
- Name: "Ubuntu 16.04",
- Visibility: "public",
- Owner: "1234567890",
- Tags: []string{"prod", "ready"},
- Properties: map[string]string{"os_distro": "ubuntu", "os_version": "16.04"},
- }
-
- listOpts, err := filters.Build()
- if err != nil {
- t.Errorf("Building filter failed with: %s", err)
- }
-
- if listOpts.Name != "Ubuntu 16.04" {
- t.Errorf("Name did not build correctly: %s", listOpts.Name)
- }
-
- if listOpts.Visibility != images.ImageVisibilityPublic {
- t.Errorf("Visibility did not build correctly: %s", listOpts.Visibility)
- }
-
- if listOpts.Owner != "1234567890" {
- t.Errorf("Owner did not build correctly: %s", listOpts.Owner)
- }
-}
-
-func TestBuildBadImageFilter(t *testing.T) {
- filterMap := map[string]interface{}{
- "limit": "3",
- "size_min": "25",
- }
-
- filters := ImageFilterOptions{}
- mapstructure.Decode(filterMap, &filters)
- listOpts, err := filters.Build()
-
- if err != nil {
- t.Errorf("Error returned processing image filter: %s", err.Error())
- return // we cannot trust listOpts to not cause unexpected behaviour
- }
-
- if listOpts.Limit == filterMap["limit"] {
- t.Errorf("Limit was parsed into ListOpts: %d", listOpts.Limit)
- }
-
- if listOpts.SizeMin != 0 {
- t.Errorf("SizeMin was parsed into ListOpts: %d", listOpts.SizeMin)
- }
-
- if listOpts.Sort != "created_at:desc" {
- t.Errorf("Sort was not applied: %s", listOpts.Sort)
- }
-
- if !filters.Empty() {
- t.Errorf("The filters should be empty due to lack of input")
- }
-}
-
-// Tests that the Empty method on ImageFilterOptions works as expected
-func TestImageFiltersEmpty(t *testing.T) {
- filledFilters := ImageFilterOptions{
- Name: "Ubuntu 16.04",
- Visibility: "public",
- Owner: "1234567890",
- Tags: []string{"prod", "ready"},
- Properties: map[string]string{"os_distro": "ubuntu", "os_version": "16.04"},
- }
-
- if filledFilters.Empty() {
- t.Errorf("Expected filled filters to be non-empty: %v", filledFilters)
- }
-
- emptyFilters := ImageFilterOptions{}
-
- if !emptyFilters.Empty() {
- t.Errorf("Expected default filter to be empty: %v", emptyFilters)
- }
-}
diff --git a/builder/openstack/step_key_pair_test.go b/builder/openstack/step_key_pair_test.go
deleted file mode 100644
index 9e0579f32..000000000
--- a/builder/openstack/step_key_pair_test.go
+++ /dev/null
@@ -1,102 +0,0 @@
-package openstack
-
-import (
- "bytes"
- "os/exec"
- "testing"
-
- packersdk "github.com/hashicorp/packer-plugin-sdk/packer"
- "golang.org/x/crypto/ssh"
-)
-
-var ber_encoded_key = `
------BEGIN RSA PRIVATE KEY-----
-MIIEqQIBAAKCAQEAo1C/iQtu7iSUJROyQgKm5VtJbaPg5GEP7IC+7TTZ2kVnWa9V
-MU37sXKWk0J7oRHcSZ/dhRyNDcsvscFAU6V3FRpZxiTEvCqIBgLyoV3g+wkan+gD
-AqNmqm77ldUIwMXT7n3AeWipw0uOBzZNjANhAf8qHIT2PXoT6LfaCof4PlPucCTx
-eC+oT5zA/MbQoGneNkHnR26ijMac2vRC90+1WpZ5KwCVE6qd2kERlb9gbAGsNLE/
-WrqR7bx4d8esLtE3l5zwkBTB63KdojMCrX/ZBiHT15TBQVsFPQqhdBT3BXfssnut
-MkCf6+X0PIQkQcW6RqKR5nOHMFdB1kEChaKYMwIDAQABAoIBAQCRBPv/opJvjzWp
-stLAgQBYe/Y5EKN7yKDOPwjLM/obMzPx1JqOvJO6X2lL/GYxgd2d1wJq2A586CdC
-7brETBLxP0PmifHUsOO2itmO5wEHiW8F/Yzmw9g/kWuAAfrSyxhFF49Zf9H3ZFkL
-GHJF2R5EGqP3TS4nKwcQyGkqntCV7p+QmPvlB05jT3vsc2jLn2yXXVEbu1X5Zj82
-cdFwH4ZSc2BDv8ixBHy+zOGLx0TMF0hxEHdNIeAjGTyYfiyDr5mgMP4w6igGvP8q
-pB5fE60ZKCEPLGyxMw69nDbXJK6YAKyNCVAD79FEl1yLYJlWfYAtOI6UeE0RUPeD
-i42vINyBAoIAgQC9zZzl4kJUTdzYLYrxQ7f51B+eOF621kleTYLprr8I4VZUExht
-KtsHdHWzMkxVtd7Q7UcG9L+Pqa3DVnD3S2C1IuUkO3eCpa93jhiwCIRYQfR7EzuR
-ntVrQHfYaCgr8ahmWdoeZUr8lSDDp0/h+MamEksNEjZA+XwFWg6ycLgGwQKCAIEA
-3EYz5iHqaOdekBYXcFpkq8uk+Sn27Cmnd7pLfK/YWEAb3Pie9X0pftA1O8z0tW9p
-vEBS+pA27S55a38avmZSkZAiXMJOZ3HV99VZi5WU0Pg9A9oIiQvW6td9b1uuVl5q
-o9fCK/r17E7NCFimtqSNtrNR/X08g+l4Dp1Ourgm7/MCggCAIGMohbWhGd+bcqv6
-zIaAqzm+F3KI/uv74wKY9yUhZfOFlp0XivFIJLKDrwtDKVD6b249s3sqAOq0QuPK
-LPiIzP/iV9dp4jpBgcYWgltBsgm3HRVAEe4nfsCmcp/7UtxOnwBwDsW8EPOlfp1b
-LTUVOJtggR99cILh3cvrPBmt3UECggCBALsRH7g8a1+lxmglashu6/n+G1/DZMER
-avjCDKOajuf7oe4acpzXK6tX1S2xFM0VDj3iftXuLcdl5ZYGPsceDNc0CgqutXki
-cu1jkgV6BgUmHGMuAnuow19znEI7ISaWTohQjsVc/wctsPB6oTKRMwzK40Gc3wzD
-9MKsk5T9GYxDAoIAgAFW9agGS4th1RrVwngjKHCPenQR1QSvHDHv3E3EQta1d0K3
-Cx7RCdBpDNeNIpHVq8uTaWjSZ+Em6YDja7CqIfPj0HcykizxS4L7Dh0gt7I5+kuy
-yBgJhEgIw3mK7U47nm9MmR/67RI4IS978ekVXP2oGdYqVUhHvMuOix8a72xk
------END RSA PRIVATE KEY-----
-`
-
-var der_encoded_key = `
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEAmfhARpOHdm5i551GEtOO2NEH36Dm2NjJp6eHQpnrwDW0bqd6
-qHJSmhocSb/3r2WwPOsfBKa135aCEOqXKcrc2gY+IsgGMF8bFG//UVcHA0KGG9A8
-mWwYBIU4lpb7DY54IllDDO11BERrxOEsPqmNgGzE0yOYApC2t8OcXsUE15kznhLn
-d4V53kN//jRGR44KrGMcL8nrKDIBudz90ae7tRGBHYiMWPB89yYdUt06dXPLqqbf
-JIUhuOBwle3IOuwJPmPEwsXFXkxKCYzKDAyi+weCDKtqeUl3HNbCB0f7g/uxUDhQ
-wRzZ1v4g35LHh5zQR26dizl4Uj2dNLL6K5xkPwIDAQABAoIBABdpTPSuSAG1BSrs
-mhQQwP6swgK553//bqIkcgepedRPFjFhG+BzCaZO5BA+tT2hO6v3oE7Hvo3Rx9Mk
-qHl9VBl+q4IEYhSG0YpJAUxv7CwNuHCQODan3fsJ+rHDIUdNa2zln7FehdVxReW4
-y05334EwiLkGB34UXQQSJTuvv228rF5F7wCs0luZWJ9IpGNWpwI2K6pg3ME/bIb6
-xFMf6jKWUUZht1m+40UG2bhsMPPknde2zAq4DjJTl7bJuuhceqp3ylm5h+oUDCl2
-twyGhn8gpHrMXVCcEvxwno8aJfNJ18iZu+lIQTT1DVuRrFprGDc9dFW6zVFauv6W
-ZG5AUXkCgYEAyoBUPVFaf3E6nDqq26J5x6+DBe6afS7tqNn5E/z2cI54KLiUDwjs
-P9axjdVMqqUiNw0jJRi8nUe1psDLguSZo4tFSgsWbsdnZQutQz2fy87jIgZOzZpj
-fqud64O/fMm8fpGBz5LQjo27FLRfQcr23KVjWeQgBSMfMk2oe8Mw8+sCgYEAwqWc
-abQBpG5TqtgvR3M9W0tAK51SSZF5okKif8KMoDJ67pXX2iTgh4bnUugaYObcG3qV
-5VH9xlOuN4td4RfBybzRcKJDN/oinwZhMjQKKjyhpjLInDqnF4ogLPevT6cCq8I+
-rHfK6DhtqLUG4BYDD7QWOBZpCTwd3n+7Xk39v/0CgYEAoaM9mpRNgFyJRBswNpDC
-VDosg5epiTLkUVtsDiBlNgMCtr5esIGW0n40y9nukGevn/HEk9/i7khHHwvVZm3C
-lWCdtjSTe2l/hpCDhKCz5KMHeik+za7mrD2gmFVZi+obo4vR6jZuctt+8U/omUPB
-OO5rF12YkYEvbZ+/VMrBUHECgYEArWGpvvpJ0Dc6Ld9d1e5PxCd2pKMBLmj4CNIE
-P3uDmhr9J9KvsC/TFMXU/iOjg5eAjrWWGev7+pKFiBKLcDqiMtoPUZ4n9A/KkQ60
-u2xhdZgGga2QxqD0P+KYoJWMQo5IschX3XbjdhD1lSaTVj4lQfKvLAzCSSiUjqIG
-u40LL90CgYB9t3CISlVJ+l1zy7QPIvAul5VuhwjxBHaotdLuXzvXFJXZH2dQ9j/a
-/p2GMUq+VZbKq45x4I5Z3ax462qMRDmpx9yjtrwNavDV47uf34pQrNpuWO7kQfsM
-mKMH6Gf6COfSIbLuejdzSOUAmjkFpm+nwBkka1eHdAy4ALn9wNQz3w==
------END RSA PRIVATE KEY-----
-`
-
-func TestBerToDer(t *testing.T) {
- _, err := exec.LookPath("openssl")
- if err != nil {
- t.Skipf("OpenSSL not available skipping test.")
- }
-
- msg := new(bytes.Buffer)
- ui := &packersdk.BasicUi{
- Reader: new(bytes.Buffer),
- Writer: msg,
- }
-
- // Test - a DER encoded key comes back unchanged.
- newKey := string(berToDer([]byte(der_encoded_key), ui))
- if newKey != der_encoded_key {
- t.Errorf("Trying to convert a DER encoded key should return the same key.")
- }
- if string(msg.Bytes()) != "" {
- t.Errorf("Doing nothing with a DER encoded key result in no messages to the UI .")
- }
-
- // Test - a BER encoded key should be converted to DER.
- newKey = string(berToDer([]byte(ber_encoded_key), ui))
- _, err = ssh.ParsePrivateKey([]byte(newKey))
- if err != nil {
- t.Errorf("Trying to convert a BER encoded key should return a DER encoded key parsable by Go.")
- }
- if string(msg.Bytes()) != "Successfully converted BER encoded SSH key to DER encoding.\n" {
- t.Errorf("Trying to convert a BER encoded key should tell the UI about the success.")
- }
-}
diff --git a/builder/openstack/version/version.go b/builder/openstack/version/version.go
deleted file mode 100644
index 3161752de..000000000
--- a/builder/openstack/version/version.go
+++ /dev/null
@@ -1,13 +0,0 @@
-package version
-
-import (
- "github.com/hashicorp/packer-plugin-sdk/version"
- packerVersion "github.com/hashicorp/packer/version"
-)
-
-var OpenstackPluginVersion *version.PluginVersion
-
-func init() {
- OpenstackPluginVersion = version.InitializePluginVersion(
- packerVersion.Version, packerVersion.VersionPrerelease)
-}
diff --git a/command/vendored_plugins.go b/command/vendored_plugins.go
index 49b36f1e4..cf77c8fda 100644
--- a/command/vendored_plugins.go
+++ b/command/vendored_plugins.go
@@ -28,6 +28,7 @@ import (
googlecomputeexportpostprocessor "github.com/hashicorp/packer-plugin-googlecompute/post-processor/googlecompute-export"
googlecomputeimportpostprocessor "github.com/hashicorp/packer-plugin-googlecompute/post-processor/googlecompute-import"
ncloudbuilder "github.com/hashicorp/packer-plugin-ncloud/builder/ncloud"
+ openstackbuilder "github.com/hashicorp/packer-plugin-openstack/builder/openstack"
oscbsubuilder "github.com/hashicorp/packer-plugin-outscale/builder/osc/bsu"
oscbsusurrogatebuilder "github.com/hashicorp/packer-plugin-outscale/builder/osc/bsusurrogate"
oscbsuvolumebuilder "github.com/hashicorp/packer-plugin-outscale/builder/osc/bsuvolume"
@@ -68,6 +69,7 @@ var VendoredBuilders = map[string]packersdk.Builder{
"docker": new(dockerbuilder.Builder),
"googlecompute": new(googlecomputebuilder.Builder),
"ncloud": new(ncloudbuilder.Builder),
+ "openstack": new(openstackbuilder.Builder),
"proxmox": new(proxmoxiso.Builder),
"proxmox-iso": new(proxmoxiso.Builder),
"proxmox-clone": new(proxmoxclone.Builder),
diff --git a/go.mod b/go.mod
index 19e05927e..b7a676588 100644
--- a/go.mod
+++ b/go.mod
@@ -45,6 +45,7 @@ require (
github.com/hashicorp/packer-plugin-docker v0.0.7
github.com/hashicorp/packer-plugin-googlecompute v0.0.1
github.com/hashicorp/packer-plugin-ncloud v0.0.2
+ github.com/hashicorp/packer-plugin-openstack v0.0.1
github.com/hashicorp/packer-plugin-outscale v0.0.1
github.com/hashicorp/packer-plugin-parallels v0.0.1
github.com/hashicorp/packer-plugin-proxmox v0.0.2
diff --git a/go.sum b/go.sum
index ea662b6a3..8357d13ec 100644
--- a/go.sum
+++ b/go.sum
@@ -474,6 +474,8 @@ github.com/hashicorp/packer-plugin-googlecompute v0.0.1 h1:Shjio88MraB+ocj0VI5+M
github.com/hashicorp/packer-plugin-googlecompute v0.0.1/go.mod h1:MfV898IrEMpKH6wVnvOI5Tkhxm2snf3QxwVqV4k3bNI=
github.com/hashicorp/packer-plugin-ncloud v0.0.2 h1:MGvGkOVfzeosqOSs5dteghLwv9VRcRxTuLoLX1ssUag=
github.com/hashicorp/packer-plugin-ncloud v0.0.2/go.mod h1:Hud2R1pkky96TQy3TPTTrr9Kej4b/4dqC/v+uEE0VDY=
+github.com/hashicorp/packer-plugin-openstack v0.0.1 h1:FUaNjKguAipPZZXQ4UiJK6c5+2nS89CRxJHjAsfVyIQ=
+github.com/hashicorp/packer-plugin-openstack v0.0.1/go.mod h1:L1OTbN24H+izce3v5IyQLdjDdrUigxPWgAQOK920h9A=
github.com/hashicorp/packer-plugin-outscale v0.0.1 h1:BrL8hKypNYrvP3NR+d+xX03SZKB08yTgXPRnH9piUI8=
github.com/hashicorp/packer-plugin-outscale v0.0.1/go.mod h1:6jEWfJO7TgAbaL3e+St1bN5PoIC/MmDIsYqNUzAHF1w=
github.com/hashicorp/packer-plugin-parallels v0.0.1 h1:fcaaiGWdU1+X4IGadXdUhJ2si1ZA3apXS9tMNJXln2A=
@@ -1192,8 +1194,9 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/vendor/github.com/hashicorp/packer-plugin-openstack/LICENSE b/vendor/github.com/hashicorp/packer-plugin-openstack/LICENSE
new file mode 100644
index 000000000..a612ad981
--- /dev/null
+++ b/vendor/github.com/hashicorp/packer-plugin-openstack/LICENSE
@@ -0,0 +1,373 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+ means each individual or legal entity that creates, contributes to
+ the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+ means the combination of the Contributions of others (if any) used
+ by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+ means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+ means Source Code Form to which the initial Contributor has attached
+ the notice in Exhibit A, the Executable Form of such Source Code
+ Form, and Modifications of such Source Code Form, in each case
+ including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+ means
+
+ (a) that the initial Contributor has attached the notice described
+ in Exhibit B to the Covered Software; or
+
+ (b) that the Covered Software was made available under the terms of
+ version 1.1 or earlier of the License, but not also under the
+ terms of a Secondary License.
+
+1.6. "Executable Form"
+ means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+ means a work that combines Covered Software with other material, in
+ a separate file or files, that is not Covered Software.
+
+1.8. "License"
+ means this document.
+
+1.9. "Licensable"
+ means having the right to grant, to the maximum extent possible,
+ whether at the time of the initial grant or subsequently, any and
+ all of the rights conveyed by this License.
+
+1.10. "Modifications"
+ means any of the following:
+
+ (a) any file in Source Code Form that results from an addition to,
+ deletion from, or modification of the contents of Covered
+ Software; or
+
+ (b) any new file in Source Code Form that contains any Covered
+ Software.
+
+1.11. "Patent Claims" of a Contributor
+ means any patent claim(s), including without limitation, method,
+ process, and apparatus claims, in any patent Licensable by such
+ Contributor that would be infringed, but for the grant of the
+ License, by the making, using, selling, offering for sale, having
+ made, import, or transfer of either its Contributions or its
+ Contributor Version.
+
+1.12. "Secondary License"
+ means either the GNU General Public License, Version 2.0, the GNU
+ Lesser General Public License, Version 2.1, the GNU Affero General
+ Public License, Version 3.0, or any later versions of those
+ licenses.
+
+1.13. "Source Code Form"
+ means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+ means an individual or a legal entity exercising rights under this
+ License. For legal entities, "You" includes any entity that
+ controls, is controlled by, or is under common control with You. For
+ purposes of this definition, "control" means (a) the power, direct
+ or indirect, to cause the direction or management of such entity,
+ whether by contract or otherwise, or (b) ownership of more than
+ fifty percent (50%) of the outstanding shares or beneficial
+ ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+ Licensable by such Contributor to use, reproduce, make available,
+ modify, display, perform, distribute, and otherwise exploit its
+ Contributions, either on an unmodified basis, with Modifications, or
+ as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+ for sale, have made, import, and otherwise transfer either its
+ Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+ or
+
+(b) for infringements caused by: (i) Your and any other third party's
+ modifications of Covered Software, or (ii) the combination of its
+ Contributions with other software (except as part of its Contributor
+ Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+ its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+ Form, as described in Section 3.1, and You must inform recipients of
+ the Executable Form how they can obtain a copy of such Source Code
+ Form by reasonable means in a timely manner, at a charge no more
+ than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+ License, or sublicense it under different terms, provided that the
+ license for the Executable Form does not attempt to limit or alter
+ the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+* *
+* 6. Disclaimer of Warranty *
+* ------------------------- *
+* *
+* Covered Software is provided under this License on an "as is" *
+* basis, without warranty of any kind, either expressed, implied, or *
+* statutory, including, without limitation, warranties that the *
+* Covered Software is free of defects, merchantable, fit for a *
+* particular purpose or non-infringing. The entire risk as to the *
+* quality and performance of the Covered Software is with You. *
+* Should any Covered Software prove defective in any respect, You *
+* (not any Contributor) assume the cost of any necessary servicing, *
+* repair, or correction. This disclaimer of warranty constitutes an *
+* essential part of this License. No use of any Covered Software is *
+* authorized under this License except under this disclaimer. *
+* *
+************************************************************************
+
+************************************************************************
+* *
+* 7. Limitation of Liability *
+* -------------------------- *
+* *
+* Under no circumstances and under no legal theory, whether tort *
+* (including negligence), contract, or otherwise, shall any *
+* Contributor, or anyone who distributes Covered Software as *
+* permitted above, be liable to You for any direct, indirect, *
+* special, incidental, or consequential damages of any character *
+* including, without limitation, damages for lost profits, loss of *
+* goodwill, work stoppage, computer failure or malfunction, or any *
+* and all other commercial damages or losses, even if such party *
+* shall have been informed of the possibility of such damages. This *
+* limitation of liability shall not apply to liability for death or *
+* personal injury resulting from such party's negligence to the *
+* extent applicable law prohibits such limitation. Some *
+* jurisdictions do not allow the exclusion or limitation of *
+* incidental or consequential damages, so this exclusion and *
+* limitation may not apply to You. *
+* *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+ This Source Code Form is subject to the terms of the Mozilla Public
+ License, v. 2.0. If a copy of the MPL was not distributed with this
+ file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
+
+Exhibit B - "Incompatible With Secondary Licenses" Notice
+---------------------------------------------------------
+
+ This Source Code Form is "Incompatible With Secondary Licenses", as
+ defined by the Mozilla Public License, v. 2.0.
diff --git a/builder/openstack/access_config.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/access_config.go
similarity index 100%
rename from builder/openstack/access_config.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/access_config.go
diff --git a/builder/openstack/artifact.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/artifact.go
similarity index 100%
rename from builder/openstack/artifact.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/artifact.go
diff --git a/builder/openstack/builder.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/builder.go
similarity index 100%
rename from builder/openstack/builder.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/builder.go
diff --git a/builder/openstack/builder.hcl2spec.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/builder.hcl2spec.go
similarity index 100%
rename from builder/openstack/builder.hcl2spec.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/builder.hcl2spec.go
diff --git a/builder/openstack/image_config.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/image_config.go
similarity index 100%
rename from builder/openstack/image_config.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/image_config.go
diff --git a/builder/openstack/networks.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/networks.go
similarity index 100%
rename from builder/openstack/networks.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/networks.go
diff --git a/builder/openstack/run_config.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/run_config.go
similarity index 100%
rename from builder/openstack/run_config.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/run_config.go
diff --git a/builder/openstack/server.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/server.go
similarity index 100%
rename from builder/openstack/server.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/server.go
diff --git a/builder/openstack/ssh.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/ssh.go
similarity index 100%
rename from builder/openstack/ssh.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/ssh.go
diff --git a/builder/openstack/step_add_image_members.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_add_image_members.go
similarity index 100%
rename from builder/openstack/step_add_image_members.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_add_image_members.go
diff --git a/builder/openstack/step_allocate_ip.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_allocate_ip.go
similarity index 100%
rename from builder/openstack/step_allocate_ip.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_allocate_ip.go
diff --git a/builder/openstack/step_create_image.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_create_image.go
similarity index 100%
rename from builder/openstack/step_create_image.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_create_image.go
diff --git a/builder/openstack/step_create_volume.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_create_volume.go
similarity index 100%
rename from builder/openstack/step_create_volume.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_create_volume.go
diff --git a/builder/openstack/step_detach_volume.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_detach_volume.go
similarity index 100%
rename from builder/openstack/step_detach_volume.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_detach_volume.go
diff --git a/builder/openstack/step_discover_network.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_discover_network.go
similarity index 100%
rename from builder/openstack/step_discover_network.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_discover_network.go
diff --git a/builder/openstack/step_get_password.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_get_password.go
similarity index 100%
rename from builder/openstack/step_get_password.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_get_password.go
diff --git a/builder/openstack/step_key_pair.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_key_pair.go
similarity index 100%
rename from builder/openstack/step_key_pair.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_key_pair.go
diff --git a/builder/openstack/step_load_flavor.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_load_flavor.go
similarity index 100%
rename from builder/openstack/step_load_flavor.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_load_flavor.go
diff --git a/builder/openstack/step_run_source_server.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_run_source_server.go
similarity index 100%
rename from builder/openstack/step_run_source_server.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_run_source_server.go
diff --git a/builder/openstack/step_source_image_info.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_source_image_info.go
similarity index 100%
rename from builder/openstack/step_source_image_info.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_source_image_info.go
diff --git a/builder/openstack/step_stop_server.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_stop_server.go
similarity index 100%
rename from builder/openstack/step_stop_server.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_stop_server.go
diff --git a/builder/openstack/step_update_image_mindisk.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_update_image_mindisk.go
similarity index 100%
rename from builder/openstack/step_update_image_mindisk.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_update_image_mindisk.go
diff --git a/builder/openstack/step_update_image_tags.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_update_image_tags.go
similarity index 100%
rename from builder/openstack/step_update_image_tags.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_update_image_tags.go
diff --git a/builder/openstack/step_update_image_visibility.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_update_image_visibility.go
similarity index 100%
rename from builder/openstack/step_update_image_visibility.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_update_image_visibility.go
diff --git a/builder/openstack/step_wait_for_rackconnect.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_wait_for_rackconnect.go
similarity index 100%
rename from builder/openstack/step_wait_for_rackconnect.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/step_wait_for_rackconnect.go
diff --git a/builder/openstack/volume.go b/vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/volume.go
similarity index 100%
rename from builder/openstack/volume.go
rename to vendor/github.com/hashicorp/packer-plugin-openstack/builder/openstack/volume.go
diff --git a/vendor/gopkg.in/yaml.v2/.travis.yml b/vendor/gopkg.in/yaml.v2/.travis.yml
index 055480b9e..7348c50c0 100644
--- a/vendor/gopkg.in/yaml.v2/.travis.yml
+++ b/vendor/gopkg.in/yaml.v2/.travis.yml
@@ -11,6 +11,7 @@ go:
- "1.11.x"
- "1.12.x"
- "1.13.x"
+ - "1.14.x"
- "tip"
go_import_path: gopkg.in/yaml.v2
diff --git a/vendor/gopkg.in/yaml.v2/apic.go b/vendor/gopkg.in/yaml.v2/apic.go
index d2c2308f1..acf71402c 100644
--- a/vendor/gopkg.in/yaml.v2/apic.go
+++ b/vendor/gopkg.in/yaml.v2/apic.go
@@ -79,6 +79,8 @@ func yaml_parser_set_encoding(parser *yaml_parser_t, encoding yaml_encoding_t) {
parser.encoding = encoding
}
+var disableLineWrapping = false
+
// Create a new emitter object.
func yaml_emitter_initialize(emitter *yaml_emitter_t) {
*emitter = yaml_emitter_t{
@@ -86,7 +88,9 @@ func yaml_emitter_initialize(emitter *yaml_emitter_t) {
raw_buffer: make([]byte, 0, output_raw_buffer_size),
states: make([]yaml_emitter_state_t, 0, initial_stack_size),
events: make([]yaml_event_t, 0, initial_queue_size),
- best_width: -1,
+ }
+ if disableLineWrapping {
+ emitter.best_width = -1
}
}
diff --git a/vendor/gopkg.in/yaml.v2/go.mod b/vendor/gopkg.in/yaml.v2/go.mod
index 1934e8769..2cbb85aea 100644
--- a/vendor/gopkg.in/yaml.v2/go.mod
+++ b/vendor/gopkg.in/yaml.v2/go.mod
@@ -1,5 +1,5 @@
-module "gopkg.in/yaml.v2"
+module gopkg.in/yaml.v2
-require (
- "gopkg.in/check.v1" v0.0.0-20161208181325-20d25e280405
-)
+go 1.15
+
+require gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405
diff --git a/vendor/gopkg.in/yaml.v2/yaml.go b/vendor/gopkg.in/yaml.v2/yaml.go
index 89650e293..30813884c 100644
--- a/vendor/gopkg.in/yaml.v2/yaml.go
+++ b/vendor/gopkg.in/yaml.v2/yaml.go
@@ -175,7 +175,7 @@ func unmarshal(in []byte, out interface{}, strict bool) (err error) {
// Zero valued structs will be omitted if all their public
// fields are zero, unless they implement an IsZero
// method (see the IsZeroer interface type), in which
-// case the field will be included if that method returns true.
+// case the field will be excluded if IsZero returns true.
//
// flow Marshal using a flow style (useful for structs,
// sequences and maps).
@@ -464,3 +464,15 @@ func isZero(v reflect.Value) bool {
}
return false
}
+
+// FutureLineWrap globally disables line wrapping when encoding long strings.
+// This is a temporary and thus deprecated method introduced to faciliate
+// migration towards v3, which offers more control of line lengths on
+// individual encodings, and has a default matching the behavior introduced
+// by this function.
+//
+// The default formatting of v2 was erroneously changed in v2.3.0 and reverted
+// in v2.4.0, at which point this function was introduced to help migration.
+func FutureLineWrap() {
+ disableLineWrapping = true
+}
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 43a91e16a..5888fa60f 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -525,6 +525,9 @@ github.com/hashicorp/packer-plugin-googlecompute/post-processor/googlecompute-im
# github.com/hashicorp/packer-plugin-ncloud v0.0.2
## explicit
github.com/hashicorp/packer-plugin-ncloud/builder/ncloud
+# github.com/hashicorp/packer-plugin-openstack v0.0.1
+## explicit
+github.com/hashicorp/packer-plugin-openstack/builder/openstack
# github.com/hashicorp/packer-plugin-outscale v0.0.1
## explicit
github.com/hashicorp/packer-plugin-outscale/builder/osc/bsu
@@ -1210,7 +1213,7 @@ gopkg.in/square/go-jose.v2
gopkg.in/square/go-jose.v2/cipher
gopkg.in/square/go-jose.v2/json
gopkg.in/square/go-jose.v2/jwt
-# gopkg.in/yaml.v2 v2.3.0
+# gopkg.in/yaml.v2 v2.4.0
gopkg.in/yaml.v2
# gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
gopkg.in/yaml.v3
diff --git a/website/content/docs/builders/openstack.mdx b/website/content/docs/builders/openstack.mdx
deleted file mode 100644
index da60b0c8e..000000000
--- a/website/content/docs/builders/openstack.mdx
+++ /dev/null
@@ -1,334 +0,0 @@
----
-description: >
- The openstack Packer builder is able to create new images for use with
-
- OpenStack. The builder takes a source image, runs any provisioning necessary
- on
-
- the image after launching it, then creates a new reusable image. This reusable
-
- image can then be used as the foundation of new servers that are launched
-
- within OpenStack.
-page_title: OpenStack - Builders
----
-
-# OpenStack Builder
-
-Type: `openstack`
-Artifact BuilderId: `mitchellh.openstack`
-
-The `openstack` Packer builder is able to create new images for use with
-[OpenStack](http://www.openstack.org). The builder takes a source image, runs
-any provisioning necessary on the image after launching it, then creates a new
-reusable image. This reusable image can then be used as the foundation of new
-servers that are launched within OpenStack. The builder will create temporary
-keypairs that provide temporary access to the server while the image is being
-created. This simplifies configuration quite a bit.
-
-The builder does _not_ manage images. Once it creates an image, it is up to you
-to use it or delete it.
-
-~> **Note:** To use OpenStack builder with the OpenStack Newton (Oct 2016)
-or earlier, we recommend you use Packer v1.1.2 or earlier version.
-
-~> **OpenStack Liberty or later requires OpenSSL!** To use the OpenStack
-builder with OpenStack Liberty (Oct 2015) or later you need to have OpenSSL
-installed _if you are using temporary key pairs_, i.e. don't use
-[`ssh_keypair_name`](#ssh_keypair_name) nor
-[`ssh_password`](#ssh_password). All major
-OS'es have OpenSSL installed by default except Windows. This have been resolved
-in OpenStack Ocata(Feb 2017).
-
-~> **Note:** OpenStack Block Storage volume support is available only for
-V3 Block Storage API. It's available in OpenStack since Mitaka release (Apr
-2016).
-
-## Configuration Reference
-
-There are many configuration options available for the builder. They are
-segmented below into two categories: required and optional parameters. Within
-each category, the available configuration keys are alphabetized.
-
-In addition to the options listed here, a
-[communicator](/docs/templates/legacy_json_templates/communicator) can be configured for this
-builder.
-
-### Required:
-
-@include 'builder/openstack/AccessConfig-required.mdx'
-
-@include 'builder/openstack/ImageConfig-required.mdx'
-
-@include 'builder/openstack/RunConfig-required.mdx'
-
-### Optional:
-
-@include 'builder/openstack/AccessConfig-not-required.mdx'
-
-@include 'builder/openstack/ImageConfig-not-required.mdx'
-
-@include 'builder/openstack/RunConfig-not-required.mdx'
-
-### Communicator Configuration
-
-#### Optional:
-
-@include 'packer-plugin-sdk/communicator/Config-not-required.mdx'
-
-@include 'packer-plugin-sdk/communicator/SSH-not-required.mdx'
-
-@include 'packer-plugin-sdk/communicator/SSHTemporaryKeyPair-not-required.mdx'
-
-@include 'packer-plugin-sdk/communicator/SSH-Key-Pair-Name-not-required.mdx'
-
-@include 'packer-plugin-sdk/communicator/SSH-Private-Key-File-not-required.mdx'
-
-@include 'packer-plugin-sdk/communicator/SSH-Agent-Auth-not-required.mdx'
-
-@include 'packer-plugin-sdk/communicator/SSHInterface-not-required.mdx'
-
-## Basic Example: DevStack
-
-Here is a basic example. This is a example to build on DevStack running in a
-VM.
-
-
-
-
-```json
-{
- "type": "openstack",
- "identity_endpoint": "http://:5000/v3",
- "tenant_name": "admin",
- "domain_name": "Default",
- "username": "admin",
- "password": "",
- "region": "RegionOne",
- "ssh_username": "root",
- "image_name": "Test image",
- "source_image": "",
- "flavor": "m1.tiny",
- "insecure": "true"
-}
-```
-
-
-
-
-```hcl
-builders "openstack" {
- identity_endpoint = "http://:5000/v3"
- tenant_name = "admin"
- domain_name = "Default"
- username = "admin"
- password = ""
- region = "RegionOne"
- ssh_username = "root"
- image_name = "Test image"
- source_image = ""
- flavor = "m1.tiny"
- insecure = "true"
-}
-```
-
-
-
-
-## Basic Example: Rackspace public cloud
-
-Here is a basic example. This is a working example to build a Ubuntu 12.04 LTS
-(Precise Pangolin) on Rackspace OpenStack cloud offering.
-
-
-
-
-```json
-{
- "type": "openstack",
- "username": "foo",
- "password": "foo",
- "region": "DFW",
- "ssh_username": "root",
- "image_name": "Test image",
- "source_image": "23b564c9-c3e6-49f9-bc68-86c7a9ab5018",
- "flavor": "2"
-}
-```
-
-
-
-
-
-```hcl
-builders "openstack" {
- username = "foo"
- password = "foo"
- region = "DFW"
- ssh_username = "root"
- image_name = "Test image"
- source_image = "23b564c9-c3e6-49f9-bc68-86c7a9ab5018"
- flavor = "2"
-}
-```
-
-
-
-
-## Basic Example: Private OpenStack cloud
-
-This example builds an Ubuntu 14.04 image on a private OpenStack cloud, powered
-by Metacloud.
-
-
-
-
-```json
-{
- "type": "openstack",
- "ssh_username": "root",
- "image_name": "ubuntu1404_packer_test_1",
- "source_image": "91d9c168-d1e5-49ca-a775-3bfdbb6c97f1",
- "flavor": "2"
-}
-```
-
-
-
-
-
-```hcl
-builders "openstack" {
- ssh_username = "root"
- image_name = "ubuntu1404_packer_test_1"
- source_image = "91d9c168-d1e5-49ca-a775-3bfdbb6c97f1"
- flavor = "2"
-}
-```
-
-
-
-
-In this case, the connection information for connecting to OpenStack doesn't
-appear in the template. That is because I source a standard OpenStack script
-with environment variables set before I run this. This script is setting
-environment variables like:
-
-- `OS_AUTH_URL`
-- `OS_TENANT_ID`
-- `OS_USERNAME`
-- `OS_PASSWORD`
-
-This is slightly different when identity v3 is used:
-
-- `OS_AUTH_URL`
-- `OS_USERNAME`
-- `OS_PASSWORD`
-- `OS_DOMAIN_NAME`
-- `OS_TENANT_NAME`
-
-This will authenticate the user on the domain and scope you to the project. A
-tenant is the same as a project. It's optional to use names or IDs in v3. This
-means you can use `OS_USERNAME` or `OS_USERID`, `OS_TENANT_ID` or
-`OS_TENANT_NAME` and `OS_DOMAIN_ID` or `OS_DOMAIN_NAME`.
-
-The above example would be equivalent to an RC file looking like this :
-
-```shell
-export OS_AUTH_URL="https://identity.myprovider/v3"
-export OS_USERNAME="myuser"
-export OS_PASSWORD="password"
-export OS_USER_DOMAIN_NAME="mydomain"
-export OS_PROJECT_DOMAIN_NAME="mydomain"
-```
-
-## Basic Example: Instance with Block Storage root volume
-
-A basic example of Instance with a remote root Block Storage service volume.
-This is a working example to build an image on private OpenStack cloud powered
-by Selectel VPC.
-
-
-
-
-```json
-{
- "type": "openstack",
- "identity_endpoint": "https://api.selvpc.com/identity/v3",
- "tenant_id": "2e90c5c04c7b4c509be78723e2b55b77",
- "username": "foo",
- "password": "foo",
- "region": "ru-3",
- "ssh_username": "root",
- "image_name": "Test image",
- "source_image": "5f58ea7e-6264-4939-9d0f-0c23072b1132",
- "networks": "9aab504e-bedf-48af-9256-682a7fa3dabb",
- "flavor": "1001",
- "availability_zone": "ru-3a",
- "use_blockstorage_volume": true,
- "volume_type": "fast.ru-3a"
-}
-```
-
-
-
-
-
-```hcl
-builders "openstack" {
- identity_endpoint = "https://api.selvpc.com/identity/v3"
- tenant_id = "2e90c5c04c7b4c509be78723e2b55b77"
- username = "foo"
- password = "foo"
- region = "ru-3"
- ssh_username = "root"
- image_name = "Test image"
- source_image = "5f58ea7e-6264-4939-9d0f-0c23072b1132"
- networks = "9aab504e-bedf-48af-9256-682a7fa3dabb"
- flavor = "1001"
- availability_zone = "ru-3a"
- use_blockstorage_volume = true
- volume_type = "fast.ru-3a"
-}
-```
-
-
-
-
-## Notes on OpenStack Authorization
-
-The simplest way to get all settings for authorization against OpenStack is to
-go into the OpenStack Dashboard (Horizon) select your _Project_ and navigate
-_Project, Access & Security_, select _API Access_ and _Download OpenStack RC
-File v3_. Source the file, and select your wanted region by setting environment
-variable `OS_REGION_NAME` or `OS_REGION_ID` and
-`export OS_TENANT_NAME=$OS_PROJECT_NAME` or
-`export OS_TENANT_ID=$OS_PROJECT_ID`.
-
-~> `OS_TENANT_NAME` or `OS_TENANT_ID` must be used even with Identity v3,
-`OS_PROJECT_NAME` and `OS_PROJECT_ID` has no effect in Packer.
-
-To troubleshoot authorization issues test you environment variables with the
-OpenStack cli. It can be installed with
-
- $ pip install --user python-openstackclient
-
-### Authorize Using Tokens
-
-To authorize with a access token only `identity_endpoint` and `token` is
-needed, and possibly `tenant_name` or `tenant_id` depending on your token type.
-Or use the following environment variables:
-
-- `OS_AUTH_URL`
-- `OS_TOKEN`
-- One of `OS_TENANT_NAME` or `OS_TENANT_ID`
-
-### Authorize Using Application Credential
-
-To authorize with an application credential, only `identity_endpoint`,
-`application_credential_id`, and `application_credential_secret` are needed.
-Or use the following environment variables:
-
-- `OS_AUTH_URL`
-- `OS_APPLICATION_CREDENTIAL_ID`
-- `OS_APPLICATION_CREDENTIAL_SECRET`
diff --git a/website/data/docs-nav-data.json b/website/data/docs-nav-data.json
index 09bdc6e83..eae4579a3 100644
--- a/website/data/docs-nav-data.json
+++ b/website/data/docs-nav-data.json
@@ -753,10 +753,6 @@
"title": "1&1",
"path": "builders/oneandone"
},
- {
- "title": "OpenStack",
- "path": "builders/openstack"
- },
{
"title": "Oracle",
"routes": [
diff --git a/website/data/docs-remote-plugins.json b/website/data/docs-remote-plugins.json
index 09b033e94..8f05a9b0d 100644
--- a/website/data/docs-remote-plugins.json
+++ b/website/data/docs-remote-plugins.json
@@ -37,6 +37,26 @@
"pluginTier": "community",
"version": "latest"
},
+ {
+ "title": "Openstack",
+ "path": "openstack",
+ "repo": "hashicorp/packer-plugin-openstack",
+ "pluginTier": "community",
+ "version": "latest"
+ },
+ {
+ "title": "Outscale",
+ "path": "outscale",
+ "repo": "hashicorp/packer-plugin-outscale",
+ "version": "latest",
+ "pluginTier": "community"
+ },
+ {
+ "title": "Parallels",
+ "path": "parallels",
+ "repo": "hashicorp/packer-plugin-parallels",
+ "version": "latest"
+ },
{
"title": "Proxmox",
"path": "proxmox",
@@ -74,18 +94,5 @@
"path": "qemu",
"repo": "hashicorp/packer-plugin-qemu",
"version": "latest"
- },
- {
- "title": "Outscale",
- "path": "outscale",
- "repo": "hashicorp/packer-plugin-outscale",
- "version": "latest",
- "pluginTier": "community"
- },
- {
- "title": "Parallels",
- "path": "parallels",
- "repo": "hashicorp/packer-plugin-parallels",
- "version": "latest"
}
]