(apiConfig userconfig.API, force bool)
| 60 | } |
| 61 | |
| 62 | func UpdateAPI(apiConfig userconfig.API, force bool) (*spec.API, string, error) { |
| 63 | prevK8sResources, err := getK8sResources(apiConfig.Name) |
| 64 | if err != nil { |
| 65 | return nil, "", err |
| 66 | } |
| 67 | |
| 68 | initialDeploymentTime := time.Now().UnixNano() |
| 69 | deploymentID := generateDeploymentID() |
| 70 | if prevK8sResources.apiVirtualService != nil && prevK8sResources.apiVirtualService.Labels["initialDeploymentTime"] != "" { |
| 71 | var err error |
| 72 | initialDeploymentTime, err = k8s.ParseInt64Label(prevK8sResources.apiVirtualService, "initialDeploymentTime") |
| 73 | if err != nil { |
| 74 | return nil, "", err |
| 75 | } |
| 76 | deploymentID = prevK8sResources.apiVirtualService.Labels["deploymentID"] |
| 77 | } |
| 78 | |
| 79 | api := spec.GetAPISpec(&apiConfig, initialDeploymentTime, deploymentID, config.ClusterConfig.ClusterUID) |
| 80 | |
| 81 | // resource creation |
| 82 | if prevK8sResources.apiVirtualService == nil { |
| 83 | if err := config.AWS.UploadJSONToS3(api, config.ClusterConfig.Bucket, api.Key); err != nil { |
| 84 | return nil, "", errors.Wrap(err, "upload api spec") |
| 85 | } |
| 86 | |
| 87 | tags := map[string]string{ |
| 88 | "apiName": apiConfig.Name, |
| 89 | } |
| 90 | |
| 91 | queueURL, err := createFIFOQueue(apiConfig.Name, initialDeploymentTime, tags) |
| 92 | if err != nil { |
| 93 | return nil, "", err |
| 94 | } |
| 95 | |
| 96 | if err = applyK8sResources(*api, prevK8sResources, queueURL); err != nil { |
| 97 | routines.RunWithPanicHandler(func() { |
| 98 | _ = parallel.RunFirstErr( |
| 99 | func() error { |
| 100 | return deleteQueueByURL(queueURL) |
| 101 | }, |
| 102 | func() error { |
| 103 | return deleteK8sResources(api.Name) |
| 104 | }, |
| 105 | ) |
| 106 | }) |
| 107 | return nil, "", err |
| 108 | } |
| 109 | |
| 110 | return api, fmt.Sprintf("creating %s", api.Resource.UserString()), nil |
| 111 | } |
| 112 | |
| 113 | // resource update |
| 114 | if prevK8sResources.apiVirtualService.Labels["specID"] != api.SpecID { |
| 115 | isUpdating, err := isAPIUpdating(prevK8sResources.apiDeployment) |
| 116 | if err != nil { |
| 117 | return nil, "", err |
| 118 | } |
| 119 | if isUpdating && !force { |
no test coverage detected