Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/lp 1887978 #11847

Merged
merged 5 commits into from
Jul 23, 2020
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion caas/kubernetes/provider/bootstrap.go
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,7 @@ func (c *controllerStack) createControllerService() error {
}

logger.Debugf("creating controller service: \n%+v", spec)
if err := c.broker.ensureK8sService(spec); err != nil {
if _, err := c.broker.ensureK8sService(spec); err != nil {
return errors.Trace(err)
}

Expand Down
67 changes: 15 additions & 52 deletions caas/kubernetes/provider/k8s.go
Original file line number Diff line number Diff line change
Expand Up @@ -1013,6 +1013,15 @@ func (k *kubernetesClient) ensureService(

annotations := resourceTagsToAnnotations(params.ResourceTags)

// ensure services.
if len(workloadSpec.Services) > 0 {
servicesCleanUps, err := k.ensureServicesForApp(appName, annotations, workloadSpec.Services)
cleanups = append(cleanups, servicesCleanUps...)
if err != nil {
return errors.Annotate(err, "creating or updating services")
}
}

// ensure configmap.
if len(workloadSpec.ConfigMaps) > 0 {
cmsCleanUps, err := k.ensureConfigMaps(appName, annotations, workloadSpec.ConfigMaps)
Expand Down Expand Up @@ -1775,7 +1784,8 @@ func (k *kubernetesClient) configureService(
ExternalName: config.GetString(serviceExternalNameKey, ""),
},
}
return k.ensureK8sService(service)
_, err = k.ensureK8sService(service)
return err
}

func (k *kubernetesClient) configureHeadlessService(
Expand All @@ -1797,57 +1807,8 @@ func (k *kubernetesClient) configureHeadlessService(
PublishNotReadyAddresses: true,
},
}
return k.ensureK8sService(service)
}

// ensureK8sService ensures a k8s service resource.
func (k *kubernetesClient) ensureK8sService(spec *core.Service) error {
services := k.client().CoreV1().Services(k.namespace)
// Set any immutable fields if the service already exists.
existing, err := services.Get(spec.Name, v1.GetOptions{})
if err == nil {
spec.Spec.ClusterIP = existing.Spec.ClusterIP
spec.ObjectMeta.ResourceVersion = existing.ObjectMeta.ResourceVersion
}
_, err = services.Update(spec)
if k8serrors.IsNotFound(err) {
_, err = services.Create(spec)
}
return errors.Trace(err)
}

// deleteService deletes a service resource.
func (k *kubernetesClient) deleteService(serviceName string) error {
services := k.client().CoreV1().Services(k.namespace)
err := services.Delete(serviceName, &v1.DeleteOptions{
PropagationPolicy: &defaultPropagationPolicy,
})
if k8serrors.IsNotFound(err) {
return nil
}
return errors.Trace(err)
}

func (k *kubernetesClient) deleteServices(appName string) error {
// Service API does not have `DeleteCollection` implemented, so we have to do it like this.
api := k.client().CoreV1().Services(k.namespace)
services, err := api.List(
v1.ListOptions{
LabelSelector: labelSetToSelector(LabelsForApp(appName)).String(),
},
)
if err != nil {
return errors.Trace(err)
}
for _, svc := range services.Items {
if err := k.deleteService(svc.GetName()); err != nil {
if errors.IsNotFound(err) {
continue
}
return errors.Trace(err)
}
}
return nil
_, err := k.ensureK8sService(service)
return err
}

// ExposeService sets up external access to the specified application.
Expand Down Expand Up @@ -2358,6 +2319,7 @@ type workloadSpec struct {
Service *specs.ServiceSpec

Secrets []k8sspecs.Secret
Services []k8sspecs.K8sService
ConfigMaps map[string]specs.ConfigMap
ServiceAccounts []k8sspecs.K8sRBACSpecConverter
CustomResourceDefinitions []k8sspecs.K8sCustomResourceDefinitionSpec
Expand Down Expand Up @@ -2438,6 +2400,7 @@ func prepareWorkloadSpec(appName, deploymentName string, podSpec *specs.PodSpec,
k8sResources := pSpec.KubernetesResources
if k8sResources != nil {
spec.Secrets = k8sResources.Secrets
spec.Services = k8sResources.Services
spec.CustomResourceDefinitions = k8sResources.CustomResourceDefinitions
spec.CustomResources = k8sResources.CustomResources
spec.MutatingWebhookConfigurations = k8sResources.MutatingWebhookConfigurations
Expand Down