func()

in perf-tools/framework/app_manager.go [63:133]


func (dam *DeploymentsAppManager) Create(schedulerName string, appInfo *AppInfo) error {
	if len(appInfo.RequestInfos) == 0 {
		return fmt.Errorf("request info not defined for app %s", appInfo.AppID)
	}
	for reqIndex, requestInfo := range appInfo.RequestInfos {
		// init container
		var container apiv1.Container
		if len(appInfo.PodSpec.Containers) > 0 {
			container = appInfo.PodSpec.Containers[0]
		} else {
			container = apiv1.Container{}
			container.Name = constants.DefaultContainerName
			container.Image = constants.DefaultContainerImage
		}
		if requestInfo.RequestResources != nil {
			if container.Resources.Requests == nil {
				container.Resources.Requests = apiv1.ResourceList{}
			}
			for resourceName, resourceValue := range requestInfo.RequestResources {
				container.Resources.Requests[apiv1.ResourceName(resourceName)] = resource.MustParse(resourceValue)
			}
		}
		if requestInfo.LimitResources != nil {
			if container.Resources.Limits == nil {
				container.Resources.Limits = apiv1.ResourceList{}
			}
			for resourceName, resourceValue := range requestInfo.LimitResources {
				container.Resources.Limits[apiv1.ResourceName(resourceName)] = resource.MustParse(resourceValue)
			}
		}
		// init and create deployment
		deployment := &appsv1.Deployment{
			ObjectMeta: metav1.ObjectMeta{
				Namespace: appInfo.Namespace,
				Name:      dam.getDeploymentName(appInfo, reqIndex),
			},
			Spec: appsv1.DeploymentSpec{
				Replicas: &requestInfo.Number,
				Selector: &metav1.LabelSelector{
					MatchLabels: map[string]string{
						constants.LabelAppID: appInfo.AppID,
					},
				},
				Template: apiv1.PodTemplateSpec{
					ObjectMeta: metav1.ObjectMeta{
						Labels: map[string]string{
							constants.LabelAppID: appInfo.AppID,
							constants.LabelQueue: appInfo.Queue,
						},
						Annotations: appInfo.PodTemplateSpec.ObjectMeta.Annotations,
					},
					Spec: apiv1.PodSpec{
						SchedulerName: schedulerName,
						HostNetwork:   appInfo.PodSpec.HostNetwork,
						Containers: []apiv1.Container{
							container,
						},
						Tolerations:       appInfo.PodSpec.Tolerations,
						NodeSelector:      appInfo.PodSpec.NodeSelector,
						PriorityClassName: requestInfo.PriorityClass,
					},
				},
			},
		}
		err := dam.kubeClient.CreateDeployment(appInfo.Namespace, deployment)
		if err != nil {
			return err
		}
	}
	return nil
}