Merge pull request #6181 from jtopjian/openstack-fix-access-addresses
provider/openstack: Fix Access Address Detection
This commit is contained in:
commit
df32703081
|
@ -1009,25 +1009,33 @@ func getInstanceAccessAddresses(d *schema.ResourceData, networks []map[string]in
|
||||||
hostv4 = floatingIP
|
hostv4 = floatingIP
|
||||||
}
|
}
|
||||||
|
|
||||||
// Loop through all networks and check for the following:
|
// Loop through all networks
|
||||||
// * If the network is set as an access network.
|
// If the network has a valid floating, fixed v4, or fixed v6 address
|
||||||
// * If the network has a floating IP.
|
// and hostv4 or hostv6 is not set, set hostv4/hostv6.
|
||||||
// * If the network has a v4/v6 fixed IP.
|
// If the network is an "access_network" overwrite hostv4/hostv6.
|
||||||
for _, n := range networks {
|
for _, n := range networks {
|
||||||
if n["floating_ip"] != nil {
|
var accessNetwork bool
|
||||||
hostv4 = n["floating_ip"].(string)
|
|
||||||
} else {
|
|
||||||
if hostv4 == "" && n["fixed_ip_v4"] != nil {
|
|
||||||
hostv4 = n["fixed_ip_v4"].(string)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if hostv6 == "" && n["fixed_ip_v6"] != nil {
|
|
||||||
hostv6 = n["fixed_ip_v6"].(string)
|
|
||||||
}
|
|
||||||
|
|
||||||
if an, ok := n["access_network"].(bool); ok && an {
|
if an, ok := n["access_network"].(bool); ok && an {
|
||||||
break
|
accessNetwork = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if fixedIPv4, ok := n["fixed_ip_v4"].(string); ok && fixedIPv4 != "" {
|
||||||
|
if hostv4 == "" || accessNetwork {
|
||||||
|
hostv4 = fixedIPv4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if floatingIP, ok := n["floating_ip"].(string); ok && floatingIP != "" {
|
||||||
|
if hostv4 == "" || accessNetwork {
|
||||||
|
hostv4 = floatingIP
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if fixedIPv6, ok := n["fixed_ip_v6"].(string); ok && fixedIPv6 != "" {
|
||||||
|
if hostv6 == "" || accessNetwork {
|
||||||
|
hostv6 = fixedIPv6
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -503,6 +503,60 @@ func TestAccComputeV2Instance_multiEphemeral(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAccComputeV2Instance_accessIPv4(t *testing.T) {
|
||||||
|
var instance servers.Server
|
||||||
|
var testAccComputeV2Instance_accessIPv4 = fmt.Sprintf(`
|
||||||
|
resource "openstack_compute_floatingip_v2" "myip" {
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "openstack_networking_network_v2" "network_1" {
|
||||||
|
name = "network_1"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "openstack_networking_subnet_v2" "subnet_1" {
|
||||||
|
name = "subnet_1"
|
||||||
|
network_id = "${openstack_networking_network_v2.network_1.id}"
|
||||||
|
cidr = "192.168.1.0/24"
|
||||||
|
ip_version = 4
|
||||||
|
enable_dhcp = true
|
||||||
|
no_gateway = true
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "openstack_compute_instance_v2" "instance_1" {
|
||||||
|
depends_on = ["openstack_networking_subnet_v2.subnet_1"]
|
||||||
|
|
||||||
|
name = "instance_1"
|
||||||
|
security_groups = ["default"]
|
||||||
|
floating_ip = "${openstack_compute_floatingip_v2.myip.address}"
|
||||||
|
|
||||||
|
network {
|
||||||
|
uuid = "%s"
|
||||||
|
}
|
||||||
|
|
||||||
|
network {
|
||||||
|
uuid = "${openstack_networking_network_v2.network_1.id}"
|
||||||
|
fixed_ip_v4 = "192.168.1.100"
|
||||||
|
access_network = true
|
||||||
|
}
|
||||||
|
}`, os.Getenv("OS_NETWORK_ID"))
|
||||||
|
|
||||||
|
resource.Test(t, resource.TestCase{
|
||||||
|
PreCheck: func() { testAccPreCheck(t) },
|
||||||
|
Providers: testAccProviders,
|
||||||
|
CheckDestroy: testAccCheckComputeV2InstanceDestroy,
|
||||||
|
Steps: []resource.TestStep{
|
||||||
|
resource.TestStep{
|
||||||
|
Config: testAccComputeV2Instance_accessIPv4,
|
||||||
|
Check: resource.ComposeTestCheckFunc(
|
||||||
|
testAccCheckComputeV2InstanceExists(t, "openstack_compute_instance_v2.instance_1", &instance),
|
||||||
|
resource.TestCheckResourceAttr(
|
||||||
|
"openstack_compute_instance_v2.instance_1", "access_ip_v4", "192.168.1.100"),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func testAccCheckComputeV2InstanceDestroy(s *terraform.State) error {
|
func testAccCheckComputeV2InstanceDestroy(s *terraform.State) error {
|
||||||
config := testAccProvider.Meta().(*Config)
|
config := testAccProvider.Meta().(*Config)
|
||||||
computeClient, err := config.computeV2Client(OS_REGION_NAME)
|
computeClient, err := config.computeV2Client(OS_REGION_NAME)
|
||||||
|
|
Loading…
Reference in New Issue