func datasourceCloudStackVPNConnectionRead()

in cloudstack/data_source_cloudstack_vpn_connection.go [54:88]


func datasourceCloudStackVPNConnectionRead(d *schema.ResourceData, meta interface{}) error {
	cs := meta.(*cloudstack.CloudStackClient)
	p := cs.VPN.NewListVpnConnectionsParams()
	csVPNConnections, err := cs.VPN.ListVpnConnections(p)

	if err != nil {
		return fmt.Errorf("Failed to list VPNs: %s", err)
	}

	filters := d.Get("filter")
	var vpnConnections []*cloudstack.VpnConnection

	for _, v := range csVPNConnections.VpnConnections {
		match, err := applyVPNConnectionFilters(v, filters.(*schema.Set))
		if err != nil {
			return err
		}
		if match {
			vpnConnections = append(vpnConnections, v)
		}
	}

	if len(vpnConnections) == 0 {
		return fmt.Errorf("No VPN Connection is matching with the specified regex")
	}
	//return the latest VPN Connection from the list of filtered VPN Connections according
	//to its creation date
	vpnConnection, err := latestVPNConnection(vpnConnections)
	if err != nil {
		return err
	}
	log.Printf("[DEBUG] Selected VPN Connections: %s\n", vpnConnection.Id)

	return vpnConnectionDescriptionAttributes(d, vpnConnection)
}