provider/openstack: Fix Access Address Detection
This commit fixes how access ip addresses are detected. The previous logic used was flawed and would detect the IPs in the wrong order.
This commit is contained in:
parent
f118e02ecd
commit
9d10028d43
|
@ -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 an, ok := n["access_network"].(bool); ok && an {
|
||||||
if hostv4 == "" && n["fixed_ip_v4"] != nil {
|
accessNetwork = true
|
||||||
hostv4 = n["fixed_ip_v4"].(string)
|
}
|
||||||
|
|
||||||
|
if fixedIPv4, ok := n["fixed_ip_v4"].(string); ok && fixedIPv4 != "" {
|
||||||
|
if hostv4 == "" || accessNetwork {
|
||||||
|
hostv4 = fixedIPv4
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if hostv6 == "" && n["fixed_ip_v6"] != nil {
|
if floatingIP, ok := n["floating_ip"].(string); ok && floatingIP != "" {
|
||||||
hostv6 = n["fixed_ip_v6"].(string)
|
if hostv4 == "" || accessNetwork {
|
||||||
|
hostv4 = floatingIP
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if an, ok := n["access_network"].(bool); ok && an {
|
if fixedIPv6, ok := n["fixed_ip_v6"].(string); ok && fixedIPv6 != "" {
|
||||||
break
|
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