MCPcopy
hub / github.com/cortexlabs/cortex / UpdateAPI

Function UpdateAPI

pkg/operator/resources/realtimeapi/api.go:48–110  ·  view source on GitHub ↗
(apiConfig *userconfig.API, force bool)

Source from the content-addressed store, hash-verified

46}
47
48func UpdateAPI(apiConfig *userconfig.API, force bool) (*spec.API, string, error) {
49 prevDeployment, prevService, prevVirtualService, err := getK8sResources(apiConfig.Name)
50 if err != nil {
51 return nil, "", err
52 }
53
54 initialDeploymentTime := time.Now().UnixNano()
55 deploymentID := generateDeploymentID()
56 if prevVirtualService != nil && prevVirtualService.Labels["initialDeploymentTime"] != "" {
57 var err error
58 initialDeploymentTime, err = k8s.ParseInt64Label(prevVirtualService, "initialDeploymentTime")
59 if err != nil {
60 return nil, "", err
61 }
62 deploymentID = prevVirtualService.Labels["deploymentID"]
63 }
64
65 api := spec.GetAPISpec(apiConfig, initialDeploymentTime, deploymentID, config.ClusterConfig.ClusterUID)
66
67 if prevDeployment == nil {
68 if err := config.AWS.UploadJSONToS3(api, config.ClusterConfig.Bucket, api.Key); err != nil {
69 return nil, "", errors.Wrap(err, "upload api spec")
70 }
71
72 if err := applyK8sResources(api, prevDeployment, prevService, prevVirtualService); err != nil {
73 routines.RunWithPanicHandler(func() {
74 _ = deleteK8sResources(api.Name)
75 })
76 return nil, "", err
77 }
78
79 return api, fmt.Sprintf("creating %s", api.Resource.UserString()), nil
80 }
81
82 if prevVirtualService.Labels["specID"] != api.SpecID || prevVirtualService.Labels["deploymentID"] != api.DeploymentID {
83 isUpdating, err := isAPIUpdating(prevDeployment)
84 if err != nil {
85 return nil, "", err
86 }
87 if isUpdating && !force {
88 return nil, "", ErrorAPIUpdating(api.Name)
89 }
90
91 if err := config.AWS.UploadJSONToS3(api, config.ClusterConfig.Bucket, api.Key); err != nil {
92 return nil, "", errors.Wrap(err, "upload api spec")
93 }
94
95 if err := applyK8sResources(api, prevDeployment, prevService, prevVirtualService); err != nil {
96 return nil, "", err
97 }
98 return api, fmt.Sprintf("updating %s", api.Resource.UserString()), nil
99 }
100
101 // deployment didn't change
102 isUpdating, err := isAPIUpdating(prevDeployment)
103 if err != nil {
104 return nil, "", err
105 }

Callers 1

UpdateAPIFunction · 0.92

Calls 12

ParseInt64LabelFunction · 0.92
GetAPISpecFunction · 0.92
WrapFunction · 0.92
RunWithPanicHandlerFunction · 0.92
UploadJSONToS3Method · 0.80
getK8sResourcesFunction · 0.70
generateDeploymentIDFunction · 0.70
applyK8sResourcesFunction · 0.70
deleteK8sResourcesFunction · 0.70
isAPIUpdatingFunction · 0.70
ErrorAPIUpdatingFunction · 0.70
UserStringMethod · 0.45

Tested by

no test coverage detected