in aws-aps-rulegroupsnamespace/cmd/resource/resource.go [89:158]
func Update(req handler.Request, prevModel *Model, currentModel *Model) (handler.ProgressEvent, error) {
// contract test: contract_read_without_create
if currentModel.Arn == nil {
return handler.ProgressEvent{
OperationStatus: handler.Failed,
Message: "Invalid Update: Arn cannot be empty",
HandlerErrorCode: cloudformation.HandlerErrorCodeNotFound,
ResourceModel: currentModel,
}, nil
}
client := internal.NewAPS(req.Session)
if _, ok := req.CallbackContext["Arn"]; ok {
currentModel.Arn = aws.String(req.CallbackContext["Arn"].(string))
return validateRuleGroupsNamespaceState(
client,
currentModel,
prometheusservice.RuleGroupsNamespaceStatusCodeActive,
"Update Complete")
}
_, workspaceID, err := internal.ParseARN(*currentModel.Arn)
if err != nil {
return handler.ProgressEvent{
OperationStatus: handler.Failed,
Message: "Invalid Read: invalid ARN format",
HandlerErrorCode: cloudformation.HandlerErrorCodeNotFound,
ResourceModel: currentModel,
}, nil
}
toAdd, toRemove := internal.StringMapDifference(tagsToStringMap(currentModel.Tags), tagsToStringMap(prevModel.Tags))
if len(toRemove) > 0 {
_, err = client.UntagResource(&prometheusservice.UntagResourceInput{
ResourceArn: currentModel.Arn,
TagKeys: toRemove,
})
if err != nil {
return internal.NewFailedEvent(err)
}
}
if len(toAdd) > 0 {
_, err = client.TagResource(&prometheusservice.TagResourceInput{
ResourceArn: currentModel.Arn,
Tags: toAdd,
})
if err != nil {
return internal.NewFailedEvent(err)
}
}
_, err = client.
PutRuleGroupsNamespace(&prometheusservice.PutRuleGroupsNamespaceInput{
WorkspaceId: aws.String(workspaceID),
Name: currentModel.Name,
Data: []byte(*currentModel.Data),
})
if err != nil {
return internal.NewFailedEvent(err)
}
return handler.ProgressEvent{
OperationStatus: handler.InProgress,
Message: "In Progress",
ResourceModel: currentModel,
CallbackDelaySeconds: defaultCallbackSeconds,
CallbackContext: buildCallbackContext(currentModel),
}, nil
}