Setting project ID as well in cloudconfig. Using loadbalancerID in cloudconfig. Retrieving instance IP from openstack in protokube.

This commit is contained in:
Derek Lemon -T (delemon - AEROTEK INC at Cisco) 2019-01-18 10:17:14 -07:00
parent fc740dbba3
commit eb256593bc
11 changed files with 80 additions and 24 deletions

View File

@ -109,14 +109,22 @@ func (b *CloudConfigBuilder) Build(c *fi.ModelBuilderContext) error {
if osc == nil { if osc == nil {
break break
} }
//Support mapping of older keystone API
tenantName := os.Getenv("OS_TENANT_NAME")
if tenantName == "" {
tenantName = os.Getenv("OS_PROJECT_NAME")
}
tenantID := os.Getenv("OS_TENANT_ID")
if tenantID == "" {
tenantID = os.Getenv("OS_PROJECT_ID")
}
lines = append(lines, lines = append(lines,
fmt.Sprintf("auth-url=\"%s\"", os.Getenv("OS_AUTH_URL")), fmt.Sprintf("auth-url=\"%s\"", os.Getenv("OS_AUTH_URL")),
fmt.Sprintf("username=\"%s\"", os.Getenv("OS_USERNAME")), fmt.Sprintf("username=\"%s\"", os.Getenv("OS_USERNAME")),
fmt.Sprintf("password=\"%s\"", os.Getenv("OS_PASSWORD")), fmt.Sprintf("password=\"%s\"", os.Getenv("OS_PASSWORD")),
fmt.Sprintf("region=\"%s\"", os.Getenv("OS_REGION_NAME")), fmt.Sprintf("region=\"%s\"", os.Getenv("OS_REGION_NAME")),
fmt.Sprintf("tenant-id=\"%s\"", os.Getenv("OS_TENANT_ID")), fmt.Sprintf("tenant-id=\"%s\"", tenantID),
fmt.Sprintf("tenant-name=\"%s\"", os.Getenv("OS_TENANT_NAME")), fmt.Sprintf("tenant-name=\"%s\"", tenantName),
fmt.Sprintf("domain-name=\"%s\"", os.Getenv("OS_DOMAIN_NAME")), fmt.Sprintf("domain-name=\"%s\"", os.Getenv("OS_DOMAIN_NAME")),
fmt.Sprintf("domain-id=\"%s\"", os.Getenv("OS_DOMAIN_ID")), fmt.Sprintf("domain-id=\"%s\"", os.Getenv("OS_DOMAIN_ID")),
"", "",
@ -125,13 +133,20 @@ func (b *CloudConfigBuilder) Build(c *fi.ModelBuilderContext) error {
if lb := osc.Loadbalancer; lb != nil { if lb := osc.Loadbalancer; lb != nil {
lines = append(lines, lines = append(lines,
"[LoadBalancer]", "[LoadBalancer]",
fmt.Sprintf("floating-network-id=%s", fi.StringValue(lb.FloatingNetwork)), fmt.Sprintf("floating-network-id=%s", fi.StringValue(lb.FloatingNetworkID)),
fmt.Sprintf("lb-method=%s", fi.StringValue(lb.Method)), fmt.Sprintf("lb-method=%s", fi.StringValue(lb.Method)),
fmt.Sprintf("lb-provider=%s", fi.StringValue(lb.Provider)), fmt.Sprintf("lb-provider=%s", fi.StringValue(lb.Provider)),
fmt.Sprintf("use-octavia=%t", fi.BoolValue(lb.UseOctavia)), fmt.Sprintf("use-octavia=%t", fi.BoolValue(lb.UseOctavia)),
"", "",
) )
} }
//Block Storage Config
lines = append(lines,
"[BlockStorage]",
"bs-version=v2", //v2 assumed in OpenstackCloud
"ignore-volume-az=true",
"")
if monitor := osc.Monitor; monitor != nil { if monitor := osc.Monitor; monitor != nil {
lines = append(lines, lines = append(lines,
"create-monitor=yes", "create-monitor=yes",

View File

@ -495,11 +495,12 @@ type LeaderElectionConfiguration struct {
// OpenstackLoadbalancerConfig defines the config for a neutron loadbalancer // OpenstackLoadbalancerConfig defines the config for a neutron loadbalancer
type OpenstackLoadbalancerConfig struct { type OpenstackLoadbalancerConfig struct {
Method *string `json:"method,omitempty"` Method *string `json:"method,omitempty"`
Provider *string `json:"provider,omitempty"` Provider *string `json:"provider,omitempty"`
UseOctavia *bool `json:"useOctavia,omitempty"` UseOctavia *bool `json:"useOctavia,omitempty"`
FloatingNetwork *string `json:"floatingNetwork,omitempty"` FloatingNetwork *string `json:"floatingNetwork,omitempty"`
SubnetID *string `json:"subnetID,omitempty"` FloatingNetworkID *string `json:"floatingNetworkID,omitempty"`
SubnetID *string `json:"subnetID,omitempty"`
} }
// OpenstackMonitor defines the config for a health monitor // OpenstackMonitor defines the config for a health monitor

View File

@ -495,11 +495,12 @@ type LeaderElectionConfiguration struct {
// OpenstackLoadbalancerConfig defines the config for a neutron loadbalancer // OpenstackLoadbalancerConfig defines the config for a neutron loadbalancer
type OpenstackLoadbalancerConfig struct { type OpenstackLoadbalancerConfig struct {
Method *string `json:"method,omitempty"` Method *string `json:"method,omitempty"`
Provider *string `json:"provider,omitempty"` Provider *string `json:"provider,omitempty"`
UseOctavia *bool `json:"useOctavia,omitempty"` UseOctavia *bool `json:"useOctavia,omitempty"`
FloatingNetwork *string `json:"floatingNetwork,omitempty"` FloatingNetwork *string `json:"floatingNetwork,omitempty"`
SubnetID *string `json:"subnetID,omitempty"` FloatingNetworkID *string `json:"floatingNetworkID,omitempty"`
SubnetID *string `json:"subnetID,omitempty"`
} }
// OpenstackMonitor defines the config for a health monitor // OpenstackMonitor defines the config for a health monitor

View File

@ -3859,6 +3859,7 @@ func autoConvert_v1alpha1_OpenstackLoadbalancerConfig_To_kops_OpenstackLoadbalan
out.Provider = in.Provider out.Provider = in.Provider
out.UseOctavia = in.UseOctavia out.UseOctavia = in.UseOctavia
out.FloatingNetwork = in.FloatingNetwork out.FloatingNetwork = in.FloatingNetwork
out.FloatingNetworkID = in.FloatingNetworkID
out.SubnetID = in.SubnetID out.SubnetID = in.SubnetID
return nil return nil
} }
@ -3873,6 +3874,7 @@ func autoConvert_kops_OpenstackLoadbalancerConfig_To_v1alpha1_OpenstackLoadbalan
out.Provider = in.Provider out.Provider = in.Provider
out.UseOctavia = in.UseOctavia out.UseOctavia = in.UseOctavia
out.FloatingNetwork = in.FloatingNetwork out.FloatingNetwork = in.FloatingNetwork
out.FloatingNetworkID = in.FloatingNetworkID
out.SubnetID = in.SubnetID out.SubnetID = in.SubnetID
return nil return nil
} }

View File

@ -2494,6 +2494,11 @@ func (in *OpenstackLoadbalancerConfig) DeepCopyInto(out *OpenstackLoadbalancerCo
*out = new(string) *out = new(string)
**out = **in **out = **in
} }
if in.FloatingNetworkID != nil {
in, out := &in.FloatingNetworkID, &out.FloatingNetworkID
*out = new(string)
**out = **in
}
if in.SubnetID != nil { if in.SubnetID != nil {
in, out := &in.SubnetID, &out.SubnetID in, out := &in.SubnetID, &out.SubnetID
*out = new(string) *out = new(string)

View File

@ -495,11 +495,12 @@ type LeaderElectionConfiguration struct {
// OpenstackLoadbalancerConfig defines the config for a neutron loadbalancer // OpenstackLoadbalancerConfig defines the config for a neutron loadbalancer
type OpenstackLoadbalancerConfig struct { type OpenstackLoadbalancerConfig struct {
Method *string `json:"method,omitempty"` Method *string `json:"method,omitempty"`
Provider *string `json:"provider,omitempty"` Provider *string `json:"provider,omitempty"`
UseOctavia *bool `json:"useOctavia,omitempty"` UseOctavia *bool `json:"useOctavia,omitempty"`
FloatingNetwork *string `json:"floatingNetwork,omitempty"` FloatingNetwork *string `json:"floatingNetwork,omitempty"`
SubnetID *string `json:"subnetID,omitempty"` FloatingNetworkID *string `json:"floatingNetworkID,omitempty"`
SubnetID *string `json:"subnetID,omitempty"`
} }
// OpenstackMonitor defines the config for a health monitor // OpenstackMonitor defines the config for a health monitor

View File

@ -4129,6 +4129,7 @@ func autoConvert_v1alpha2_OpenstackLoadbalancerConfig_To_kops_OpenstackLoadbalan
out.Provider = in.Provider out.Provider = in.Provider
out.UseOctavia = in.UseOctavia out.UseOctavia = in.UseOctavia
out.FloatingNetwork = in.FloatingNetwork out.FloatingNetwork = in.FloatingNetwork
out.FloatingNetworkID = in.FloatingNetworkID
out.SubnetID = in.SubnetID out.SubnetID = in.SubnetID
return nil return nil
} }
@ -4143,6 +4144,7 @@ func autoConvert_kops_OpenstackLoadbalancerConfig_To_v1alpha2_OpenstackLoadbalan
out.Provider = in.Provider out.Provider = in.Provider
out.UseOctavia = in.UseOctavia out.UseOctavia = in.UseOctavia
out.FloatingNetwork = in.FloatingNetwork out.FloatingNetwork = in.FloatingNetwork
out.FloatingNetworkID = in.FloatingNetworkID
out.SubnetID = in.SubnetID out.SubnetID = in.SubnetID
return nil return nil
} }

View File

@ -2581,6 +2581,11 @@ func (in *OpenstackLoadbalancerConfig) DeepCopyInto(out *OpenstackLoadbalancerCo
*out = new(string) *out = new(string)
**out = **in **out = **in
} }
if in.FloatingNetworkID != nil {
in, out := &in.FloatingNetworkID, &out.FloatingNetworkID
*out = new(string)
**out = **in
}
if in.SubnetID != nil { if in.SubnetID != nil {
in, out := &in.SubnetID, &out.SubnetID in, out := &in.SubnetID, &out.SubnetID
*out = new(string) *out = new(string)

View File

@ -2795,6 +2795,11 @@ func (in *OpenstackLoadbalancerConfig) DeepCopyInto(out *OpenstackLoadbalancerCo
*out = new(string) *out = new(string)
**out = **in **out = **in
} }
if in.FloatingNetworkID != nil {
in, out := &in.FloatingNetworkID, &out.FloatingNetworkID
*out = new(string)
**out = **in
}
if in.SubnetID != nil { if in.SubnetID != nil {
in, out := &in.SubnetID, &out.SubnetID in, out := &in.SubnetID, &out.SubnetID
*out = new(string) *out = new(string)

View File

@ -28,6 +28,7 @@ import (
"github.com/golang/glog" "github.com/golang/glog"
cinderv2 "github.com/gophercloud/gophercloud/openstack/blockstorage/v2/volumes" cinderv2 "github.com/gophercloud/gophercloud/openstack/blockstorage/v2/volumes"
"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/volumeattach" "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/volumeattach"
"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
"k8s.io/kops/protokube/pkg/etcd" "k8s.io/kops/protokube/pkg/etcd"
"k8s.io/kops/protokube/pkg/gossip" "k8s.io/kops/protokube/pkg/gossip"
gossipos "k8s.io/kops/protokube/pkg/gossip/openstack" gossipos "k8s.io/kops/protokube/pkg/gossip/openstack"
@ -172,14 +173,21 @@ func (a *OpenstackVolumes) discoverTags() error {
// Internal IP // Internal IP
{ {
ips, err := net.LookupIP(a.meta.Hostname) servers, err := a.cloud.ListInstances(servers.ListOpts{
Host: a.instanceName,
TenantID: a.meta.ProjectID,
})
if err != nil || len(servers) < 1 {
return fmt.Errorf("error listing servers for hostname %s: %v", a.meta.Hostname, err)
}
if len(servers) > 1 {
return fmt.Errorf("recieved more than one server for hostname %s", a.meta.Hostname)
}
ip, err := openstack.GetServerFixedIP(&servers[0], a.clusterName)
if err != nil { if err != nil {
return fmt.Errorf("error querying InternalIP from hostname: %v", err) return fmt.Errorf("error querying InternalIP from hostname: %v", err)
} }
if len(ips) == 0 { a.internalIP = net.ParseIP(ip)
return fmt.Errorf("ip lookups from metadata hostname was empty")
}
a.internalIP = ips[0]
glog.Infof("Found internalIP=%q", a.internalIP) glog.Infof("Found internalIP=%q", a.internalIP)
} }

View File

@ -321,6 +321,17 @@ func NewOpenstackCloud(tags map[string]string, spec *kops.ClusterSpec) (Openstac
c.extNetworkName = spec.CloudConfig.Openstack.Router.ExternalNetwork c.extNetworkName = spec.CloudConfig.Openstack.Router.ExternalNetwork
} }
if spec.CloudConfig.Openstack.Loadbalancer.FloatingNetworkID == nil &&
spec.CloudConfig.Openstack.Loadbalancer.FloatingNetwork != nil {
// This field is derived
lbNet, err := c.ListNetworks(networks.ListOpts{
Name: fi.StringValue(spec.CloudConfig.Openstack.Loadbalancer.FloatingNetwork),
})
if err != nil || len(lbNet) != 1 {
return c, fmt.Errorf("could not establish floating network id.")
}
spec.CloudConfig.Openstack.Loadbalancer.FloatingNetworkID = fi.String(lbNet[0].ID)
}
return c, nil return c, nil
} }