Merge pull request #6181 from jtopjian/openstack-fix-access-addresses

provider/openstack: Fix Access Address Detection
This commit is contained in:
Joe Topjian 2016-04-16 22:51:55 -06:00
commit df32703081
2 changed files with 75 additions and 13 deletions

View File

@ -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
}
} }
} }

View File

@ -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)