Update deployment.go
This commit is contained in:
		@ -21,7 +21,7 @@ type deployment struct{}
 | 
				
			|||||||
//定义列表的返回内容,Items是deployment元素列表,Total为deployment元素数量
 | 
					//定义列表的返回内容,Items是deployment元素列表,Total为deployment元素数量
 | 
				
			||||||
type DeploymentsResp struct {
 | 
					type DeploymentsResp struct {
 | 
				
			||||||
	Items []appsv1.Deployment `json:"items"`
 | 
						Items []appsv1.Deployment `json:"items"`
 | 
				
			||||||
	Total int
 | 
						Total int                 `json:"total"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//定义DeployCreate结构体,用于创建deployment需要的参数属性的定义
 | 
					//定义DeployCreate结构体,用于创建deployment需要的参数属性的定义
 | 
				
			||||||
@ -38,7 +38,7 @@ type DeployCreate struct {
 | 
				
			|||||||
	HealthPath    string            `json:"health_path"`
 | 
						HealthPath    string            `json:"health_path"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//定义DeploysNp类型,用于返回namespace中的deployment数据
 | 
					//定义DeploysNp类型,用于返回namespace中deployment的数量
 | 
				
			||||||
type DeploysNp struct {
 | 
					type DeploysNp struct {
 | 
				
			||||||
	Namespace string `json:"namespace"`
 | 
						Namespace string `json:"namespace"`
 | 
				
			||||||
	DeployNum int    `json:"deployment_num"`
 | 
						DeployNum int    `json:"deployment_num"`
 | 
				
			||||||
@ -49,12 +49,9 @@ func (d *deployment) GetDeployments(filterName, namespace string, limit, page in
 | 
				
			|||||||
	//获取deploymentList类型的deployment列表
 | 
						//获取deploymentList类型的deployment列表
 | 
				
			||||||
	deploymentList, err := K8s.ClientSet.AppsV1().Deployments(namespace).List(context.TODO(), metav1.ListOptions{})
 | 
						deploymentList, err := K8s.ClientSet.AppsV1().Deployments(namespace).List(context.TODO(), metav1.ListOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		//打印日志,排错
 | 
							logger.Error(errors.New("获取Deployment列表失败, " + err.Error()))
 | 
				
			||||||
		logger.Error("获取Deployment列表失败," + err.Error())
 | 
							return nil, errors.New("获取Deployment列表失败, " + err.Error())
 | 
				
			||||||
		//返回给上一层,最终返回给前端,前端打印出该error
 | 
					 | 
				
			||||||
		return nil, errors.New("获取Deployment列表失败," + err.Error())
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
	//将deploymentList中的deployment列表(Items),放进dataselector对象中,进行排序
 | 
						//将deploymentList中的deployment列表(Items),放进dataselector对象中,进行排序
 | 
				
			||||||
	selectableData := &dataSelector{
 | 
						selectableData := &dataSelector{
 | 
				
			||||||
		GenericDataList: d.toCells(deploymentList.Items),
 | 
							GenericDataList: d.toCells(deploymentList.Items),
 | 
				
			||||||
@ -67,74 +64,69 @@ func (d *deployment) GetDeployments(filterName, namespace string, limit, page in
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//先过滤
 | 
					 | 
				
			||||||
	filtered := selectableData.Filter()
 | 
						filtered := selectableData.Filter()
 | 
				
			||||||
	total := len(filtered.GenericDataList)
 | 
						total := len(filtered.GenericDataList)
 | 
				
			||||||
	//排序和分页
 | 
					 | 
				
			||||||
	data := filtered.Sort().Paginate()
 | 
						data := filtered.Sort().Paginate()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//将DataCell类型的deployment列表转换成appsv1.deployment列表
 | 
						//将[]DataCell类型的deployment列表转为appsv1.deployment列表
 | 
				
			||||||
	deployments := d.fromCells(data.GenericDataList)
 | 
						deployments := d.fromCells(data.GenericDataList)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return &DeploymentsResp{
 | 
						return &DeploymentsResp{
 | 
				
			||||||
		Items: deployments,
 | 
							Items: deployments,
 | 
				
			||||||
		Total: total,
 | 
							Total: total,
 | 
				
			||||||
	}, nil
 | 
						}, nil
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//获取Deployment详情
 | 
					//获取deployment详情
 | 
				
			||||||
func (d *deployment) GetDeploymentDetail(deploymentName, namespace string) (deployment *appsv1.Deployment, err error) {
 | 
					func (d *deployment) GetDeploymentDetail(deploymentName, namespace string) (deployment *appsv1.Deployment, err error) {
 | 
				
			||||||
	deployment, err = K8s.ClientSet.AppsV1().Deployments(namespace).Get(context.TODO(), deploymentName, metav1.GetOptions{})
 | 
						deployment, err = K8s.ClientSet.AppsV1().Deployments(namespace).Get(context.TODO(), deploymentName, metav1.GetOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		logger.Error(errors.New("获取Deployment详情失败, " + err.Error()))
 | 
							logger.Error(errors.New("获取Deployment详情失败, " + err.Error()))
 | 
				
			||||||
		return nil, errors.New("获取Deployment详情失败, " + err.Error())
 | 
							return nil, errors.New("获取Deployment详情失败, " + err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return deployment, nil
 | 
						return deployment, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//修改Deployment副本数
 | 
					//设置deployment副本数
 | 
				
			||||||
func (d *deployment) ScaleDeployment(deploymentName, namespace string, scaleNum int) (replica int32, err error) {
 | 
					func (d *deployment) ScaleDeployment(deploymentName, namespace string, scaleNum int) (replica int32, err error) {
 | 
				
			||||||
	//获取autoscalingv1.Scale类型的对象,能点出当前的副本数
 | 
						//获取autoscalingv1.Scale类型的对象,能点出当前的副本数
 | 
				
			||||||
	scale, err := K8s.ClientSet.AppsV1().Deployments(namespace).GetScale(context.TODO(), deploymentName, metav1.GetOptions{})
 | 
						scale, err := K8s.ClientSet.AppsV1().Deployments(namespace).GetScale(context.TODO(), deploymentName, metav1.GetOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		logger.Error(errors.New("获取Deployment副本数信息失败," + err.Error()))
 | 
							logger.Error(errors.New("获取Deployment副本数信息失败, " + err.Error()))
 | 
				
			||||||
		return 0, errors.New("获取Deployment副本数信息失败," + err.Error())
 | 
							return 0, errors.New("获取Deployment副本数信息失败, " + err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	//修改副本数
 | 
						//修改副本数
 | 
				
			||||||
	scale.Spec.Replicas = int32(scaleNum)
 | 
						scale.Spec.Replicas = int32(scaleNum)
 | 
				
			||||||
	//更新副本数,传入scale对象
 | 
						//更新副本数,传入scale对象
 | 
				
			||||||
	newScale, err := K8s.ClientSet.AppsV1().Deployments(namespace).UpdateScale(context.TODO(), deploymentName, scale, metav1.UpdateOptions{})
 | 
						newScale, err := K8s.ClientSet.AppsV1().Deployments(namespace).UpdateScale(context.TODO(), deploymentName, scale, metav1.UpdateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		logger.Error(errors.New("更新Deployment副本数信息失败," + err.Error()))
 | 
							logger.Error(errors.New("更新Deployment副本数信息失败, " + err.Error()))
 | 
				
			||||||
		return 0, errors.New("更新Deployment副本数信息失败," + err.Error())
 | 
							return 0, errors.New("更新Deployment副本数信息失败, " + err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return newScale.Spec.Replicas, nil
 | 
						return newScale.Spec.Replicas, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//创建Deployment,接收DeployCreate对象
 | 
					//创建deployment,接收DeployCreate对象
 | 
				
			||||||
func (d *deployment) CreateDeployment(data *DeployCreate) (err error) {
 | 
					func (d *deployment) CreateDeployment(data *DeployCreate) (err error) {
 | 
				
			||||||
	//初始化appsv1.Deployment类型的对象,并将入参的data数据放进去
 | 
						//初始化appsv1.Deployment类型的对象,并将入参的data数据放进去
 | 
				
			||||||
	deployment := &appsv1.Deployment{
 | 
						deployment := &appsv1.Deployment{
 | 
				
			||||||
		//ObjectMeta中定义资源名、命名空间以及标签
 | 
					 | 
				
			||||||
		ObjectMeta: metav1.ObjectMeta{
 | 
							ObjectMeta: metav1.ObjectMeta{
 | 
				
			||||||
			Name:      data.Name,
 | 
								Name:      data.Name,
 | 
				
			||||||
			Namespace: data.Namespace,
 | 
								Namespace: data.Namespace,
 | 
				
			||||||
			Labels:    data.Label,
 | 
								Labels:    data.Label,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		//Spec中定义副本数、选择器、以及Pod属性
 | 
					 | 
				
			||||||
		Spec: appsv1.DeploymentSpec{
 | 
							Spec: appsv1.DeploymentSpec{
 | 
				
			||||||
			Replicas: &data.Replicas,
 | 
								Replicas: &data.Replicas,
 | 
				
			||||||
			Selector: &metav1.LabelSelector{
 | 
								Selector: &metav1.LabelSelector{
 | 
				
			||||||
				MatchLabels: data.Label,
 | 
									MatchLabels: data.Label,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			Template: corev1.PodTemplateSpec{
 | 
								Template: corev1.PodTemplateSpec{
 | 
				
			||||||
				//定义Pod名和标签
 | 
					 | 
				
			||||||
				ObjectMeta: metav1.ObjectMeta{
 | 
									ObjectMeta: metav1.ObjectMeta{
 | 
				
			||||||
					Name:   data.Name,
 | 
										Name:   data.Name,
 | 
				
			||||||
					Labels: data.Label,
 | 
										Labels: data.Label,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				//定义容器名、镜像和端口
 | 
					 | 
				
			||||||
				Spec: corev1.PodSpec{
 | 
									Spec: corev1.PodSpec{
 | 
				
			||||||
					Containers: []corev1.Container{
 | 
										Containers: []corev1.Container{
 | 
				
			||||||
						{
 | 
											{
 | 
				
			||||||
@ -152,15 +144,12 @@ func (d *deployment) CreateDeployment(data *DeployCreate) (err error) {
 | 
				
			|||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		//Status定义资源的运行状态,这里由于是新建,传入空的appsv1.DeploymentStatus{}对象即可
 | 
					 | 
				
			||||||
		Status: appsv1.DeploymentStatus{},
 | 
							Status: appsv1.DeploymentStatus{},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	//判断是否打开健康检查功能,如果打开,则定义ReadinessProbe和LivenessProbe
 | 
						//判断健康检查功能是否打开,若打开,则增加健康检查功能
 | 
				
			||||||
	if data.HealthCheck {
 | 
						if data.HealthCheck {
 | 
				
			||||||
		//设置第一个容器的ReadnessProbe,因为我们pod中只有一个容器,所以直接使用index 0 即可
 | 
					 | 
				
			||||||
		//如果pod中有多个容器,则这里需要使用for循环去定义
 | 
					 | 
				
			||||||
		deployment.Spec.Template.Spec.Containers[0].ReadinessProbe = &corev1.Probe{
 | 
							deployment.Spec.Template.Spec.Containers[0].ReadinessProbe = &corev1.Probe{
 | 
				
			||||||
			Handler: corev1.Handler{
 | 
								ProbeHandler: corev1.ProbeHandler{
 | 
				
			||||||
				HTTPGet: &corev1.HTTPGetAction{
 | 
									HTTPGet: &corev1.HTTPGetAction{
 | 
				
			||||||
					Path: data.HealthPath,
 | 
										Path: data.HealthPath,
 | 
				
			||||||
					Port: intstr.IntOrString{
 | 
										Port: intstr.IntOrString{
 | 
				
			||||||
@ -174,20 +163,18 @@ func (d *deployment) CreateDeployment(data *DeployCreate) (err error) {
 | 
				
			|||||||
			PeriodSeconds:       5,
 | 
								PeriodSeconds:       5,
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		deployment.Spec.Template.Spec.Containers[0].LivenessProbe = &corev1.Probe{
 | 
							deployment.Spec.Template.Spec.Containers[0].LivenessProbe = &corev1.Probe{
 | 
				
			||||||
			Handler: corev1.Handler{
 | 
								ProbeHandler: corev1.ProbeHandler{
 | 
				
			||||||
				HTTPGet: &corev1.HTTPGetAction{
 | 
									HTTPGet: &corev1.HTTPGetAction{
 | 
				
			||||||
					Path: data.HealthPath,
 | 
										Path: data.HealthPath,
 | 
				
			||||||
					Port: intstr.IntOrString{
 | 
										Port: intstr.IntOrString{
 | 
				
			||||||
						Type: 0,
 | 
											Type:   0,
 | 
				
			||||||
						IntVal: data.ContainerPort,
 | 
											IntVal: data.ContainerPort,
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			InitialDelaySeconds: 15,
 | 
								InitialDelaySeconds: 15,
 | 
				
			||||||
			//超时时间
 | 
								TimeoutSeconds:      5,
 | 
				
			||||||
			TimeoutSeconds: 5,
 | 
								PeriodSeconds:       5,
 | 
				
			||||||
			//执行间隔
 | 
					 | 
				
			||||||
			PeriodSeconds: 5,
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	//定义容器的limit和request资源
 | 
						//定义容器的limit和request资源
 | 
				
			||||||
@ -204,9 +191,10 @@ func (d *deployment) CreateDeployment(data *DeployCreate) (err error) {
 | 
				
			|||||||
	_, err = K8s.ClientSet.AppsV1().Deployments(data.Namespace).
 | 
						_, err = K8s.ClientSet.AppsV1().Deployments(data.Namespace).
 | 
				
			||||||
		Create(context.TODO(), deployment, metav1.CreateOptions{})
 | 
							Create(context.TODO(), deployment, metav1.CreateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		logger.Error(errors.New("创建Deployment失败," + err.Error()))
 | 
							logger.Error(errors.New("创建Deployment失败, " + err.Error()))
 | 
				
			||||||
		return errors.New("创建Deployment失败," + err.Error())
 | 
							return errors.New("创建Deployment失败, " + err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -217,11 +205,12 @@ func (d *deployment) DeleteDeployment(deploymentName, namespace string) (err err
 | 
				
			|||||||
		logger.Error(errors.New("删除Deployment失败, " + err.Error()))
 | 
							logger.Error(errors.New("删除Deployment失败, " + err.Error()))
 | 
				
			||||||
		return errors.New("删除Deployment失败, " + err.Error())
 | 
							return errors.New("删除Deployment失败, " + err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//重启deployment
 | 
					//重启deployment
 | 
				
			||||||
func(d *deployment) RestartDeployment(deploymentName, namespace string) (err error) {
 | 
					func (d *deployment) RestartDeployment(deploymentName, namespace string) (err error) {
 | 
				
			||||||
	//此功能等同于一下kubectl命令
 | 
						//此功能等同于一下kubectl命令
 | 
				
			||||||
	//kubectl deployment ${service} -p \
 | 
						//kubectl deployment ${service} -p \
 | 
				
			||||||
	//'{"spec":{"template":{"spec":{"containers":[{"name":"'"${service}"'","env":[{"name":"RESTART_","value":"'$(date +%s)'"}]}]}}}}'
 | 
						//'{"spec":{"template":{"spec":{"containers":[{"name":"'"${service}"'","env":[{"name":"RESTART_","value":"'$(date +%s)'"}]}]}}}}'
 | 
				
			||||||
@ -246,14 +235,14 @@ func(d *deployment) RestartDeployment(deploymentName, namespace string) (err err
 | 
				
			|||||||
	//序列化为字节,因为patch方法只接收字节类型参数
 | 
						//序列化为字节,因为patch方法只接收字节类型参数
 | 
				
			||||||
	patchByte, err := json.Marshal(patchData)
 | 
						patchByte, err := json.Marshal(patchData)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		logger.Error(errors.New("josn序列化失败," + err.Error()))
 | 
							logger.Error(errors.New("json序列化失败, " + err.Error()))
 | 
				
			||||||
		return errors.New("json序列化失败," + err.Error())
 | 
							return errors.New("json序列化失败, " + err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	//调用patch方法更新deployment
 | 
						//调用patch方法更新deployment
 | 
				
			||||||
	_, err = K8s.ClientSet.AppsV1().Deployments(namespace).Patch(context.TODO(), deploymentName, "application/strategic-merge-patch+json", patchByte, metav1.PatchOptions{})
 | 
						_, err = K8s.ClientSet.AppsV1().Deployments(namespace).Patch(context.TODO(), deploymentName, "application/strategic-merge-patch+json", patchByte, metav1.PatchOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		logger.Error(errors.New("重启Deployment失败," + err.Error()))
 | 
							logger.Error(errors.New("重启Deployment失败, " + err.Error()))
 | 
				
			||||||
		return errors.New("重启Deployment失败," + err.Error())
 | 
							return errors.New("重启Deployment失败, " + err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
@ -268,6 +257,7 @@ func (d *deployment) UpdateDeployment(namespace, content string) (err error) {
 | 
				
			|||||||
		logger.Error(errors.New("反序列化失败, " + err.Error()))
 | 
							logger.Error(errors.New("反序列化失败, " + err.Error()))
 | 
				
			||||||
		return errors.New("反序列化失败, " + err.Error())
 | 
							return errors.New("反序列化失败, " + err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_, err = K8s.ClientSet.AppsV1().Deployments(namespace).Update(context.TODO(), deploy, metav1.UpdateOptions{})
 | 
						_, err = K8s.ClientSet.AppsV1().Deployments(namespace).Update(context.TODO(), deploy, metav1.UpdateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		logger.Error(errors.New("更新Deployment失败, " + err.Error()))
 | 
							logger.Error(errors.New("更新Deployment失败, " + err.Error()))
 | 
				
			||||||
@ -282,7 +272,6 @@ func (d *deployment) GetDeployNumPerNp() (deploysNps []*DeploysNp, err error) {
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
	for _, namespace := range namespaceList.Items {
 | 
						for _, namespace := range namespaceList.Items {
 | 
				
			||||||
		deploymentList, err := K8s.ClientSet.AppsV1().Deployments(namespace.Name).List(context.TODO(), metav1.ListOptions{})
 | 
							deploymentList, err := K8s.ClientSet.AppsV1().Deployments(namespace.Name).List(context.TODO(), metav1.ListOptions{})
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
@ -293,12 +282,13 @@ func (d *deployment) GetDeployNumPerNp() (deploysNps []*DeploysNp, err error) {
 | 
				
			|||||||
			Namespace: namespace.Name,
 | 
								Namespace: namespace.Name,
 | 
				
			||||||
			DeployNum: len(deploymentList.Items),
 | 
								DeployNum: len(deploymentList.Items),
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		deploysNps = append(deploysNps, deploysNp)
 | 
							deploysNps = append(deploysNps, deploysNp)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return deploysNps, nil
 | 
						return deploysNps, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//类型转换的方法
 | 
					//类型转换
 | 
				
			||||||
func (d *deployment) toCells(deployments []appsv1.Deployment) []DataCell {
 | 
					func (d *deployment) toCells(deployments []appsv1.Deployment) []DataCell {
 | 
				
			||||||
	cells := make([]DataCell, len(deployments))
 | 
						cells := make([]DataCell, len(deployments))
 | 
				
			||||||
	for i := range deployments {
 | 
						for i := range deployments {
 | 
				
			||||||
@ -310,7 +300,7 @@ func (d *deployment) toCells(deployments []appsv1.Deployment) []DataCell {
 | 
				
			|||||||
func (d *deployment) fromCells(cells []DataCell) []appsv1.Deployment {
 | 
					func (d *deployment) fromCells(cells []DataCell) []appsv1.Deployment {
 | 
				
			||||||
	deployments := make([]appsv1.Deployment, len(cells))
 | 
						deployments := make([]appsv1.Deployment, len(cells))
 | 
				
			||||||
	for i := range cells {
 | 
						for i := range cells {
 | 
				
			||||||
		//cells[i].(podCell)是将DataCell类型转成podCell类型
 | 
							//cells[i].(podCell)是将DataCell类型转成podCell
 | 
				
			||||||
		deployments[i] = appsv1.Deployment(cells[i].(deploymentCell))
 | 
							deployments[i] = appsv1.Deployment(cells[i].(deploymentCell))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return deployments
 | 
						return deployments
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user