Skip to content

Commit

Permalink
istioctl/cmd/add-to-mesh:optimize code (istio#27542)
Browse files Browse the repository at this point in the history
  • Loading branch information
tanjunchen authored Oct 22, 2020
1 parent 450b8f0 commit f6859a3
Showing 1 changed file with 51 additions and 43 deletions.
94 changes: 51 additions & 43 deletions istioctl/cmd/add-to-mesh.go
Original file line number Diff line number Diff line change
Expand Up @@ -159,9 +159,7 @@ See also 'istioctl experimental remove-from-mesh deployment' which does the reve
if err != nil {
return fmt.Errorf("deployment %q does not exist", args[0])
}
deps := make([]appsv1.Deployment, 0)
deps = append(deps, *dep)
return injectSideCarIntoDeployment(client, deps, sidecarTemplate, valuesConfig,
return injectSideCarIntoDeployment(client, dep, sidecarTemplate, valuesConfig,
args[0], ns, opts.Revision, meshConfig, writer, func(warning string) {
fmt.Fprintln(cmd.ErrOrStderr(), warning)
})
Expand Down Expand Up @@ -219,7 +217,7 @@ See also 'istioctl experimental remove-from-mesh service' which does the reverse
_, _ = fmt.Fprintf(writer, "No deployments found for service %s.%s\n", args[0], ns)
return nil
}
return injectSideCarIntoDeployment(client, matchingDeployments, sidecarTemplate, valuesConfig,
return injectSideCarIntoDeployments(client, matchingDeployments, sidecarTemplate, valuesConfig,
args[0], ns, opts.Revision, meshConfig, writer, func(warning string) {
fmt.Fprintln(cmd.ErrOrStderr(), warning)
})
Expand All @@ -230,6 +228,19 @@ See also 'istioctl experimental remove-from-mesh service' which does the reverse
return cmd
}

func injectSideCarIntoDeployments(client kubernetes.Interface, deps []appsv1.Deployment, sidecarTemplate, valuesConfig,
name, namespace string, revision string, meshConfig *meshconfig.MeshConfig, writer io.Writer, warningHandler func(string)) error {
var errs error
for _, dep := range deps {
err := injectSideCarIntoDeployment(client, &dep, sidecarTemplate, valuesConfig,
name, namespace, revision, meshConfig, writer, warningHandler)
if err != nil {
errs = multierror.Append(errs, err)
}
}
return errs
}

func externalSvcMeshifyCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "external-service <svcname> <ip> [name1:]port1 [[name2:]port2] ...",
Expand Down Expand Up @@ -312,48 +323,45 @@ func setupParameters(sidecarTemplate, valuesConfig *string) (*meshconfig.MeshCon
return meshConfig, err
}

func injectSideCarIntoDeployment(client kubernetes.Interface, deps []appsv1.Deployment, sidecarTemplate, valuesConfig,
func injectSideCarIntoDeployment(client kubernetes.Interface, dep *appsv1.Deployment, sidecarTemplate, valuesConfig,
svcName, svcNamespace string, revision string, meshConfig *meshconfig.MeshConfig, writer io.Writer, warningHandler func(string)) error {
var errs error
for _, dep := range deps {
log.Debugf("updating deployment %s.%s with Istio sidecar injected",
dep.Name, dep.Namespace)
newDep, err := inject.IntoObject(sidecarTemplate, valuesConfig, revision, meshConfig, &dep, warningHandler)
if err != nil {
errs = multierror.Append(errs, fmt.Errorf("failed to inject sidecar to deployment resource %s.%s for service %s.%s due to %v",
dep.Name, dep.Namespace, svcName, svcNamespace, err))
continue
}
res, b := newDep.(*appsv1.Deployment)
if !b {
errs = multierror.Append(errs, fmt.Errorf("failed to create new deployment resource %s.%s for service %s.%s due to %v",
dep.Name, dep.Namespace, svcName, svcNamespace, err))
continue
}
if _, err =
client.AppsV1().Deployments(svcNamespace).Update(context.TODO(), res, metav1.UpdateOptions{}); err != nil {
errs = multierror.Append(errs, fmt.Errorf("failed to update deployment %s.%s for service %s.%s due to %v",
dep.Name, dep.Namespace, svcName, svcNamespace, err))
continue

}
d := &appsv1.Deployment{
ObjectMeta: metav1.ObjectMeta{
Name: dep.Name,
Namespace: dep.Namespace,
UID: dep.UID,
OwnerReferences: dep.OwnerReferences,
},
}
if _, err = client.AppsV1().Deployments(svcNamespace).UpdateStatus(context.TODO(), d, metav1.UpdateOptions{}); err != nil {
errs = multierror.Append(errs, fmt.Errorf("failed to update deployment status %s.%s for service %s.%s due to %v",
dep.Name, dep.Namespace, svcName, svcNamespace, err))
continue
}
_, _ = fmt.Fprintf(writer, "deployment %s.%s updated successfully with Istio sidecar injected.\n"+
"Next Step: Add related labels to the deployment to align with Istio's requirement: %s\n",
dep.Name, dep.Namespace, url.DeploymentRequirements)
log.Debugf("updating deployment %s.%s with Istio sidecar injected",
dep.Name, dep.Namespace)
newDep, err := inject.IntoObject(sidecarTemplate, valuesConfig, revision, meshConfig, dep, warningHandler)
if err != nil {
errs = multierror.Append(errs, fmt.Errorf("failed to inject sidecar to deployment resource %s.%s for service %s.%s due to %v",
dep.Name, dep.Namespace, svcName, svcNamespace, err))
return errs
}
res, b := newDep.(*appsv1.Deployment)
if !b {
errs = multierror.Append(errs, fmt.Errorf("failed to create new deployment resource %s.%s for service %s.%s due to %v",
dep.Name, dep.Namespace, svcName, svcNamespace, err))
return errs
}
if _, err =
client.AppsV1().Deployments(svcNamespace).Update(context.TODO(), res, metav1.UpdateOptions{}); err != nil {
errs = multierror.Append(errs, fmt.Errorf("failed to update deployment %s.%s for service %s.%s due to %v",
dep.Name, dep.Namespace, svcName, svcNamespace, err))
return errs
}
d := &appsv1.Deployment{
ObjectMeta: metav1.ObjectMeta{
Name: dep.Name,
Namespace: dep.Namespace,
UID: dep.UID,
OwnerReferences: dep.OwnerReferences,
},
}
if _, err = client.AppsV1().Deployments(svcNamespace).UpdateStatus(context.TODO(), d, metav1.UpdateOptions{}); err != nil {
errs = multierror.Append(errs, fmt.Errorf("failed to update deployment status %s.%s for service %s.%s due to %v",
dep.Name, dep.Namespace, svcName, svcNamespace, err))
return errs
}
_, _ = fmt.Fprintf(writer, "deployment %s.%s updated successfully with Istio sidecar injected.\n"+
"Next Step: Add related labels to the deployment to align with Istio's requirement: %s\n",
dep.Name, dep.Namespace, url.DeploymentRequirements)
return errs
}

Expand Down

0 comments on commit f6859a3

Please sign in to comment.