Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -278,3 +278,5 @@ CLAUDE.md

coverage.out
swagger-redis-api.json

.vscode
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@
All notable changes to this project will be documented in this file.
See updating [Changelog example here](https://keepachangelog.com/en/1.0.0/).

## 0.42.0 (10th November 2025)

### Added:

* Added `ID` field to `Region` struct in account model
* Added Redis version support for Essentials databases: `RedisVersion` field and `UpgradeRedisVersion()` method

## 0.41.0 (3rd November 2025)

### Added:
Expand Down
4 changes: 4 additions & 0 deletions account_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,12 @@ func TestAccount_ListRegions(t *testing.T) {
s := httptest.NewServer(testServer("apiKey", "secret", getRequest(t, "/regions", `{
"regions": [
{
"id": 1,
"name": "asia-east1",
"provider": "GCP"
},
{
"id": 2,
"name": "eu-west-1",
"provider": "AWS"
}
Expand All @@ -92,10 +94,12 @@ func TestAccount_ListRegions(t *testing.T) {

assert.ElementsMatch(t, []*account.Region{
{
ID: redis.Int(1),
Name: redis.String("asia-east1"),
Provider: redis.String("GCP"),
},
{
ID: redis.Int(2),
Name: redis.String("eu-west-1"),
Provider: redis.String("AWS"),
},
Expand Down
77 changes: 77 additions & 0 deletions fixed_database_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ func TestFixedDatabase_Create(t *testing.T) {
`{
"name": "my-test-fixed-database",
"protocol": "memcached",
"redisVersion": "7.4",
"respVersion": "resp2",
"dataPersistence": "none",
"dataEvictionPolicy": "noeviction",
Expand Down Expand Up @@ -84,6 +85,7 @@ func TestFixedDatabase_Create(t *testing.T) {
fixedDatabases.CreateFixedDatabase{
Name: redis.String("my-test-fixed-database"),
Protocol: redis.String("memcached"),
RedisVersion: redis.String("7.4"),
RespVersion: redis.String("resp2"),
DataPersistence: redis.String("none"),
DataEvictionPolicy: redis.String("noeviction"),
Expand Down Expand Up @@ -124,6 +126,7 @@ func TestFixedDatabase_List(t *testing.T) {
"protocol": "memcached",
"provider": "AWS",
"region": "us-west-1",
"redisVersion": "7.4",
"respVersion": "resp2",
"status": "draft",
"planMemoryLimit": 1,
Expand Down Expand Up @@ -228,6 +231,7 @@ func TestFixedDatabase_List(t *testing.T) {
Protocol: redis.String("memcached"),
Provider: redis.String("AWS"),
Region: redis.String("us-west-1"),
RedisVersion: redis.String("7.4"),
RespVersion: redis.String("resp2"),
Status: redis.String("draft"),
PlanMemoryLimit: redis.Float64(1),
Expand Down Expand Up @@ -286,6 +290,7 @@ func TestFixedDatabase_Get(t *testing.T) {
"protocol": "memcached",
"provider": "AWS",
"region": "us-west-1",
"redisVersion": "7.4",
"respVersion": "resp2",
"status": "draft",
"planMemoryLimit": 1,
Expand Down Expand Up @@ -354,6 +359,7 @@ func TestFixedDatabase_Get(t *testing.T) {
Protocol: redis.String("memcached"),
Provider: redis.String("AWS"),
Region: redis.String("us-west-1"),
RedisVersion: redis.String("7.4"),
RespVersion: redis.String("resp2"),
Status: redis.String("draft"),
PlanMemoryLimit: redis.Float64(1),
Expand Down Expand Up @@ -546,3 +552,74 @@ func TestFixedDatabase_Delete(t *testing.T) {
require.NoError(t, err)

}

func TestFixedDatabase_UpgradeRedisVersion(t *testing.T) {
server := httptest.NewServer(
testServer(
"apiKey",
"secret",
postRequest(
t,
"/fixed/subscriptions/111728/databases/51055029/upgrade",
`{
"targetRedisVersion": "7.4"
}`,
`{
"taskId": "a1b2c3d4-5678-90ab-cdef-1234567890ab",
"commandType": "fixedDatabaseUpgradeRedisVersionRequest",
"status": "received",
"description": "Task request received and is being queued for processing.",
"timestamp": "2024-05-10T14:14:14.736763484Z",
"links": [
{
"rel": "task",
"type": "GET",
"href": "https://api-staging.qa.redislabs.com/v1/tasks/a1b2c3d4-5678-90ab-cdef-1234567890ab"
}
]
}`,
),
getRequest(
t,
"/tasks/a1b2c3d4-5678-90ab-cdef-1234567890ab",
`{
"taskId": "a1b2c3d4-5678-90ab-cdef-1234567890ab",
"commandType": "fixedDatabaseUpgradeRedisVersionRequest",
"status": "processing-completed",
"description": "Request processing completed successfully and its resources are now being provisioned / de-provisioned.",
"timestamp": "2024-05-10T14:14:34.153537279Z",
"response": {
"resourceId": 51055029,
"additionalResourceId": 111728
},
"links": [
{
"rel": "resource",
"type": "GET",
"href": "https://api-staging.qa.redislabs.com/v1/fixed/subscriptions/111728/databases/51055029"
},
{
"rel": "self",
"type": "GET",
"href": "https://api-staging.qa.redislabs.com/v1/tasks/a1b2c3d4-5678-90ab-cdef-1234567890ab"
}
]
}`,
),
),
)

subject, err := clientFromTestServer(server, "apiKey", "secret")
require.NoError(t, err)

err = subject.FixedDatabases.UpgradeRedisVersion(
context.TODO(),
111728,
51055029,
fixedDatabases.UpgradeRedisVersion{
TargetRedisVersion: redis.String("7.4"),
},
)

require.NoError(t, err)
}
1 change: 1 addition & 0 deletions service/account/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ func (o regions) String() string {
}

type Region struct {
ID *int `json:"id,omitempty"`
Name *string `json:"name,omitempty"`
Provider *string `json:"provider,omitempty"`
}
Expand Down
10 changes: 10 additions & 0 deletions service/fixed/databases/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ type CreateFixedDatabase struct {
Password *string `json:"password,omitempty"`
Alerts *[]*databases.Alert `json:"alerts,omitempty"`
Modules *[]*databases.Module `json:"modules,omitempty"`
RedisVersion *string `json:"redisVersion,omitempty"`
}

type UpdateFixedDatabase struct {
Expand Down Expand Up @@ -61,6 +62,7 @@ type FixedDatabase struct {
Provider *string `json:"provider,omitempty"`
Region *string `json:"region,omitempty"`
RedisVersionCompliance *string `json:"redisVersionCompliance,omitempty"`
RedisVersion *string `json:"redisVersion,omitempty"`
RespVersion *string `json:"respVersion,omitempty"`
Status *string `json:"status,omitempty"`
PlanMemoryLimit *float64 `json:"planMemoryLimit,omitempty"`
Expand Down Expand Up @@ -160,6 +162,14 @@ func (o Import) String() string {
return internal.ToString(o)
}

type UpgradeRedisVersion struct {
TargetRedisVersion *string `json:"targetRedisVersion,omitempty"`
}

func (o UpgradeRedisVersion) String() string {
return internal.ToString(o)
}

type listFixedDatabaseResponse struct {
FixedSubscription *listDbSubscription `json:"subscription,omitempty"`
}
Expand Down
13 changes: 13 additions & 0 deletions service/fixed/databases/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,19 @@ func (a *API) Update(ctx context.Context, subscription int, database int, update
return a.taskWaiter.Wait(ctx, *task.ID)
}

// UpgradeRedisVersion will upgrade the Redis version of an existing fixed database.
func (a *API) UpgradeRedisVersion(ctx context.Context, subscription int, database int, upgradeVersion UpgradeRedisVersion) error {
var task internal.TaskResponse
err := a.client.Post(ctx, fmt.Sprintf("upgrade fixed database %d version for subscription %d", database, subscription), fmt.Sprintf("/fixed/subscriptions/%d/databases/%d/upgrade", subscription, database), upgradeVersion, &task)
if err != nil {
return err
}

a.logger.Printf("Waiting for fixed database %d for subscription %d to finish being upgraded", database, subscription)

return a.taskWaiter.Wait(ctx, *task.ID)
}

// Delete will destroy an existing fixed database.
func (a *API) Delete(ctx context.Context, subscription int, database int) error {
var task internal.TaskResponse
Expand Down