* Add ILBs, broadly following the AWS model. The following new
capabilities are added for clusters in GCP:
* Cluster's spec.api.loadBalancer can be set to 'type: internal' on
GCP.
* Therefore, GCP can now create:
* regional backend services
* regional (non-legacy) healthchecks
* firewall rules with "internal" load-balancing scheme
* firewall rules with dot-notation-specified IP addresses
* Cluster's spec.api.loadBalancer's 'subnets' field functions
as in the AWS model.
A few incidental changes are included, either because this change
touched the relevant code or because my use case happened to trigger the
issues that are fixed here.
* Cluster's spec.networkID field can be prefixed by project to use
GCP's common cross-project networking model.
* The presumption is that all specified subnets belong to this
network and therefore this project.
* Add missing operation wait on forwarding rule creation.
* Some Terraform output improvements:
* Permit no-ACL files in GCS buckets in Terraform output.
* Enable marginally better cross-resource reference in Terraform outputs
* Add project to network + subnetwork literals in Terraform output.
* Add terraform output to backend services and health checks.
Testing:
* Add mocks for backend services and health checks.
* Add minimal integration test - copied from gce_private and ilb added.
* Add update cluster goldens.
Co-authored-by: Travis Reid <travis_reid@apple.com>
This fixes an issue where kops picks the last server group found on
OpenStack instead of the right one when getting the cloud groups.
For example, lets assume that kops created those server groups and they are returned in the order as shown here by the OpenStack API:
```
cluster-name-bastion
cluster-name-cp-0
cluster-name-worker
````
Now kops looks for nodes associated with the IG "bastion" and the
expected behavior would be that it ends up using "cluster-name-bastion".
However, it will actually end up associating the cloud group with the
last server group, which is in this case "cluster-name-worker" due to
the reference switching to the last item when the loop is done.
In the worst case this could lead to kops deleting the wrong instances
when deleting an IG.
Not using the server group as a "by reference" argument when building
the cloud group fixes this behavior.