Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions pkg/apis/openstackproviderconfig/v1alpha1/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,6 @@ type OpenstackProviderSpec struct {
// The name of the cloud to use from the clouds secret
CloudName string `json:"cloudName"`

// A plaintext string of PEM(s)
CertBundle string `json:"caCert,omitempty"`

// The flavor reference for the flavor for your server instance.
Flavor string `json:"flavor"`

Expand Down
27 changes: 24 additions & 3 deletions pkg/cloud/openstack/clients/machineservice.go
Original file line number Diff line number Diff line change
Expand Up @@ -152,11 +152,25 @@ func GetCloudFromSecret(kubeClient kubernetes.Interface, namespace string, secre
return clouds.Clouds[cloudName], nil
}

func getCACertFromConfigmap(kubeClient kubernetes.Interface, namespace string, configmapName string, key string) (string, error) {
cloudConfig, err := kubeClient.CoreV1().ConfigMaps(namespace).Get(configmapName, metav1.GetOptions{})
if err != nil {
return "", fmt.Errorf("failed to get configmap %s/%s/%s from kubernetes api: %v", namespace, configmapName, key, err)
}

val, ok := cloudConfig.Data[key]
if !ok {
return "", fmt.Errorf("configmap does not contain key, %s", key)
}

return val, nil
}

// TODO: Eventually we'll have a NewInstanceServiceFromCluster too
func NewInstanceServiceFromMachine(kubeClient kubernetes.Interface, machine *machinev1.Machine) (*InstanceService, error) {
machineSpec, err := openstackconfigv1.MachineSpecFromProviderSpec(machine.Spec.ProviderSpec)
if err != nil {
return nil, fmt.Errorf("Failed to get Machine Spec from Provider Spec (clients/machineservice.go 138): %v", err)
return nil, fmt.Errorf("Failed to get Machine Spec from Provider Spec: %v", err)
}
cloud := clientconfig.Cloud{}
if machineSpec.CloudsSecret != nil && machineSpec.CloudsSecret.Name != "" {
Expand All @@ -166,10 +180,16 @@ func NewInstanceServiceFromMachine(kubeClient kubernetes.Interface, machine *mac
}
cloud, err = GetCloudFromSecret(kubeClient, namespace, machineSpec.CloudsSecret.Name, machineSpec.CloudName)
if err != nil {
return nil, fmt.Errorf("Failed to get cloud from secret (clients/machienservice.go 150): %v", err)
return nil, fmt.Errorf("Failed to get cloud from secret: %v", err)
}
}
return NewInstanceServiceFromCloud(cloud, []byte(machineSpec.CertBundle))

cacert, err := getCACertFromConfigmap(kubeClient, "openshift-config", "cloud-provider-config", "ca-bundle.pem")
if err != nil || cacert == "" {
return NewInstanceServiceFromCloud(cloud, nil)
}

return NewInstanceServiceFromCloud(cloud, []byte(cacert))
}

func NewInstanceService() (*InstanceService, error) {
Expand All @@ -188,6 +208,7 @@ func NewInstanceServiceFromCloud(cloud clientconfig.Cloud, cert []byte) (*Instan
}

opts, err := clientconfig.AuthOptions(clientOpts)

if err != nil {
return nil, err
}
Expand Down