| 
					
				 | 
			
			
				@@ -70,23 +70,7 @@ func (r *BlueGreenReconciler) Reconcile(ctx context.Context, req ctrl.Request) ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if tgt.Spec == nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			continue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		deploy := &appsv1.Deployment{ObjectMeta: metav1.ObjectMeta{Namespace: req.Namespace, Name: deploymentName(req.Name, tgt.Phase)}} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if _, err := ctrl.CreateOrUpdate(ctx, r.Client, deploy, func() error { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if err := ctrl.SetControllerReference(bluegreen, deploy, r.Scheme); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				return err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			label := map[string]string{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				"app.kubernetes.io/managed-by": "app.demo.kakao.com", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				"app.kubernetes.io/name":       req.Name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				"app.kubernetes.io/phase":      string(tgt.Phase), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			deploy.Spec.Selector = &metav1.LabelSelector{MatchLabels: label} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			deploy.Spec.Template = corev1.PodTemplateSpec{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				ObjectMeta: metav1.ObjectMeta{Labels: label}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				Spec:       *tgt.Spec, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if err := r.CreateOrUpdateDeployment(ctx, bluegreen, tgt.Phase, *tgt.Spec); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			return ctrl.Result{}, err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -104,6 +88,28 @@ func (r *BlueGreenReconciler) SetupWithManager(mgr ctrl.Manager) error { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		Complete(r) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func (r *BlueGreenReconciler) CreateOrUpdateDeployment(ctx context.Context, owner *v1.BlueGreen, phase v1.BlueOrGreen, podSpec corev1.PodSpec) error { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	deploy := &appsv1.Deployment{ObjectMeta: metav1.ObjectMeta{Namespace: owner.Namespace, Name: deploymentName(owner.Name, phase)}} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if _, err := ctrl.CreateOrUpdate(ctx, r.Client, deploy, func() error { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if err := ctrl.SetControllerReference(owner, deploy, r.Scheme); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		label := map[string]string{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			"app.kubernetes.io/managed-by": "app.demo.kakao.com", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			"app.kubernetes.io/name":       owner.Name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			"app.kubernetes.io/phase":      string(phase), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		deploy.Spec.Selector = &metav1.LabelSelector{MatchLabels: label} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		deploy.Spec.Template = corev1.PodTemplateSpec{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			ObjectMeta: metav1.ObjectMeta{Labels: label}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Spec:       podSpec, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func (r *BlueGreenReconciler) CreateOrUpdateService(ctx context.Context, owner *v1.BlueGreen) error { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	svc := &corev1.Service{ObjectMeta: metav1.ObjectMeta{Namespace: owner.Namespace, Name: owner.Name}} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if _, err := ctrl.CreateOrUpdate(ctx, r.Client, svc, 
			 |