providers/digitalocean: fix ip address when using private networking
This adds a new `ipv4_address_private` and `ipv4_address_public` computed attr. Also pulls in upstream changes from pearkes/digitalocean
This commit is contained in:
parent
5f2146999f
commit
872acb3740
|
@ -83,7 +83,7 @@ func resource_digitalocean_droplet_create(
|
||||||
|
|
||||||
// Initialize the connection info
|
// Initialize the connection info
|
||||||
rs.ConnInfo["type"] = "ssh"
|
rs.ConnInfo["type"] = "ssh"
|
||||||
rs.ConnInfo["host"] = droplet.IPV4Address()
|
rs.ConnInfo["host"] = droplet.IPV4Address("public")
|
||||||
|
|
||||||
return resource_digitalocean_droplet_update_state(rs, droplet)
|
return resource_digitalocean_droplet_update_state(rs, droplet)
|
||||||
}
|
}
|
||||||
|
@ -246,8 +246,10 @@ func resource_digitalocean_droplet_diff(
|
||||||
ComputedAttrs: []string{
|
ComputedAttrs: []string{
|
||||||
"backups",
|
"backups",
|
||||||
"ipv4_address",
|
"ipv4_address",
|
||||||
|
"ipv4_address_private",
|
||||||
"ipv6",
|
"ipv6",
|
||||||
"ipv6_address",
|
"ipv6_address",
|
||||||
|
"ipv6_address_private",
|
||||||
"locked",
|
"locked",
|
||||||
"private_networking",
|
"private_networking",
|
||||||
"status",
|
"status",
|
||||||
|
@ -270,14 +272,20 @@ func resource_digitalocean_droplet_update_state(
|
||||||
s.Attributes["image"] = droplet.ImageSlug()
|
s.Attributes["image"] = droplet.ImageSlug()
|
||||||
}
|
}
|
||||||
|
|
||||||
if droplet.IPV6Address() != "" {
|
if droplet.IPV6Address("public") != "" {
|
||||||
s.Attributes["ipv6"] = "true"
|
s.Attributes["ipv6"] = "true"
|
||||||
s.Attributes["ipv6_address"] = droplet.IPV6Address()
|
s.Attributes["ipv6_address"] = droplet.IPV6Address("public")
|
||||||
|
s.Attributes["ipv6_address_private"] = droplet.IPV6Address("private")
|
||||||
}
|
}
|
||||||
|
|
||||||
s.Attributes["ipv4_address"] = droplet.IPV4Address()
|
s.Attributes["ipv4_address"] = droplet.IPV4Address("public")
|
||||||
|
s.Attributes["ipv4_address_private"] = droplet.IPV4Address("private")
|
||||||
s.Attributes["locked"] = droplet.IsLocked()
|
s.Attributes["locked"] = droplet.IsLocked()
|
||||||
s.Attributes["private_networking"] = droplet.NetworkingType()
|
|
||||||
|
if droplet.NetworkingType() == "private" {
|
||||||
|
s.Attributes["private_networking"] = "true"
|
||||||
|
}
|
||||||
|
|
||||||
s.Attributes["size"] = droplet.SizeSlug()
|
s.Attributes["size"] = droplet.SizeSlug()
|
||||||
s.Attributes["status"] = droplet.Status
|
s.Attributes["status"] = droplet.Status
|
||||||
|
|
||||||
|
|
|
@ -68,6 +68,29 @@ func TestAccDigitalOceanDroplet_Update(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAccDigitalOceanDroplet_PrivateNetworkingIpv6(t *testing.T) {
|
||||||
|
var droplet digitalocean.Droplet
|
||||||
|
|
||||||
|
resource.Test(t, resource.TestCase{
|
||||||
|
PreCheck: func() { testAccPreCheck(t) },
|
||||||
|
Providers: testAccProviders,
|
||||||
|
CheckDestroy: testAccCheckDigitalOceanDropletDestroy,
|
||||||
|
Steps: []resource.TestStep{
|
||||||
|
resource.TestStep{
|
||||||
|
Config: testAccCheckDigitalOceanDropletConfig_PrivateNetworkingIpv6,
|
||||||
|
Check: resource.ComposeTestCheckFunc(
|
||||||
|
testAccCheckDigitalOceanDropletExists("digitalocean_droplet.foobar", &droplet),
|
||||||
|
testAccCheckDigitalOceanDropletAttributes_PrivateNetworkingIpv6(&droplet),
|
||||||
|
resource.TestCheckResourceAttr(
|
||||||
|
"digitalocean_droplet.foobar", "private_networking", "true"),
|
||||||
|
resource.TestCheckResourceAttr(
|
||||||
|
"digitalocean_droplet.foobar", "ipv6", "true"),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func testAccCheckDigitalOceanDropletDestroy(s *terraform.State) error {
|
func testAccCheckDigitalOceanDropletDestroy(s *terraform.State) error {
|
||||||
client := testAccProvider.client
|
client := testAccProvider.client
|
||||||
|
|
||||||
|
@ -127,6 +150,50 @@ func testAccCheckDigitalOceanDropletRenamedAndResized(droplet *digitalocean.Drop
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testAccCheckDigitalOceanDropletAttributes_PrivateNetworkingIpv6(droplet *digitalocean.Droplet) resource.TestCheckFunc {
|
||||||
|
return func(s *terraform.State) error {
|
||||||
|
|
||||||
|
if droplet.ImageSlug() != "centos-5-8-x32" {
|
||||||
|
return fmt.Errorf("Bad image_slug: %s", droplet.ImageSlug())
|
||||||
|
}
|
||||||
|
|
||||||
|
if droplet.SizeSlug() != "1gb" {
|
||||||
|
return fmt.Errorf("Bad size_slug: %s", droplet.SizeSlug())
|
||||||
|
}
|
||||||
|
|
||||||
|
if droplet.RegionSlug() != "sgp1" {
|
||||||
|
return fmt.Errorf("Bad region_slug: %s", droplet.RegionSlug())
|
||||||
|
}
|
||||||
|
|
||||||
|
if droplet.Name != "baz" {
|
||||||
|
return fmt.Errorf("Bad name: %s", droplet.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
if droplet.IPV4Address("private") == "" {
|
||||||
|
return fmt.Errorf("No ipv4 private: %s", droplet.IPV4Address("private"))
|
||||||
|
}
|
||||||
|
|
||||||
|
// if droplet.IPV6Address("private") == "" {
|
||||||
|
// return fmt.Errorf("No ipv6 private: %s", droplet.IPV6Address("private"))
|
||||||
|
// }
|
||||||
|
|
||||||
|
if droplet.NetworkingType() != "private" {
|
||||||
|
return fmt.Errorf("Bad networking type: %s", droplet.NetworkingType())
|
||||||
|
}
|
||||||
|
|
||||||
|
if droplet.IPV4Address("public") == "" {
|
||||||
|
return fmt.Errorf("No ipv4 public: %s", droplet.IPV4Address("public"))
|
||||||
|
}
|
||||||
|
|
||||||
|
if droplet.IPV6Address("public") == "" {
|
||||||
|
return fmt.Errorf("No ipv6 public: %s", droplet.IPV6Address("public"))
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func testAccCheckDigitalOceanDropletExists(n string, droplet *digitalocean.Droplet) resource.TestCheckFunc {
|
func testAccCheckDigitalOceanDropletExists(n string, droplet *digitalocean.Droplet) resource.TestCheckFunc {
|
||||||
return func(s *terraform.State) error {
|
return func(s *terraform.State) error {
|
||||||
rs, ok := s.Resources[n]
|
rs, ok := s.Resources[n]
|
||||||
|
@ -187,3 +254,15 @@ resource "digitalocean_droplet" "foobar" {
|
||||||
region = "nyc2"
|
region = "nyc2"
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
|
// IPV6 only in singapore
|
||||||
|
const testAccCheckDigitalOceanDropletConfig_PrivateNetworkingIpv6 = `
|
||||||
|
resource "digitalocean_droplet" "foobar" {
|
||||||
|
name = "baz"
|
||||||
|
size = "1gb"
|
||||||
|
image = "centos-5-8-x32"
|
||||||
|
region = "sgp1"
|
||||||
|
ipv6 = true
|
||||||
|
private_networking = true
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
|
@ -45,7 +45,9 @@ The following attributes are exported:
|
||||||
* `image` - The image of the droplet
|
* `image` - The image of the droplet
|
||||||
* `ipv6` - Is IPv6 enabled
|
* `ipv6` - Is IPv6 enabled
|
||||||
* `ipv6_address` - The IPv6 address
|
* `ipv6_address` - The IPv6 address
|
||||||
|
* `ipv6_address_private` - The private networking IPv6 address
|
||||||
* `ipv4_address` - The IPv4 address
|
* `ipv4_address` - The IPv4 address
|
||||||
|
* `ipv4_address_private` - The private networking IPv4 address
|
||||||
* `locked` - Is the Droplet locked
|
* `locked` - Is the Droplet locked
|
||||||
* `private_networking` - Is private networking enabled
|
* `private_networking` - Is private networking enabled
|
||||||
* `size` - The instance size
|
* `size` - The instance size
|
||||||
|
|
Loading…
Reference in New Issue