func()

in pkg/provider/k8s/k8s.go [412:456]


func (c *K8s) deploymentApply(resource runtime.Object) error {
	req := resource.(*appsV1.Deployment)
	kind := resource.GetObjectKind().GroupVersionKind().Kind
	if len(req.Namespace) == 0 {
		req.Namespace = "default"
	}

	switch v := resource.GetObjectKind().GroupVersionKind().Version; v {
	case "v1":
		client := c.clt.AppsV1().Deployments(req.Namespace)
		list, err := client.List(c.ctx, apiMetaV1.ListOptions{})
		if err != nil {
			return errors.Wrapf(err, "error listing resource : %v, name: %v", kind, req.Name)
		}

		var exists bool
		for _, l := range list.Items {
			if l.Name == req.Name {
				exists = true
				break
			}
		}

		if exists {
			if err := retry.RetryOnConflict(retry.DefaultRetry, func() error {
				_, err := client.Update(c.ctx, req, apiMetaV1.UpdateOptions{})
				return err
			}); err != nil {
				return errors.Wrapf(err, "resource update failed - kind: %v, name: %v", kind, req.Name)
			}
			log.Printf("resource updated - kind: %v, name: %v", kind, req.Name)
		} else {
			if _, err := client.Create(c.ctx, req, apiMetaV1.CreateOptions{}); err != nil {
				return errors.Wrapf(err, "resource creation failed - kind: %v, name: %v", kind, req.Name)
			}
			log.Printf("resource created - kind: %v, name: %v", kind, req.Name)
		}
	default:
		return fmt.Errorf("unknown object version: %v kind:'%v', name:'%v'", v, kind, req.Name)
	}
	return provider.RetryUntilTrue(
		fmt.Sprintf("applying deployment:%v", req.Name),
		provider.GlobalRetryCount,
		func() (bool, error) { return c.deploymentReady(resource) })
}