diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a8bed9f..ee2e9174 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ See updating [Changelog example here](https://keepachangelog.com/en/1.0.0/) ## [Unreleased] +### Changed +- **Breaking**, Managed Database: `ManagedDatabaseUserRedisAccessControl` `[]string` properties changed to `*[]string` + ### Removed - **Breaking**, Managed Database: connection related methods in favor of session diff --git a/upcloud/managed_database.go b/upcloud/managed_database.go index 5afea8d2..20ae87d0 100644 --- a/upcloud/managed_database.go +++ b/upcloud/managed_database.go @@ -622,10 +622,10 @@ type ManagedDatabaseUserPGAccessControl struct { } type ManagedDatabaseUserRedisAccessControl struct { - Categories []string `json:"categories,omitempty"` - Channels []string `json:"channels,omitempty"` - Commands []string `json:"commands,omitempty"` - Keys []string `json:"keys,omitempty"` + Categories *[]string `json:"categories,omitempty"` + Channels *[]string `json:"channels,omitempty"` + Commands *[]string `json:"commands,omitempty"` + Keys *[]string `json:"keys,omitempty"` } type ManagedDatabaseUserOpenSearchAccessControl struct { diff --git a/upcloud/managed_database_test.go b/upcloud/managed_database_test.go index 5d01000c..1db11d3a 100644 --- a/upcloud/managed_database_test.go +++ b/upcloud/managed_database_test.go @@ -779,10 +779,10 @@ func TestManagedDatabaseUser(t *testing.T) { AllowReplication: false, }, RedisAccessControl: &ManagedDatabaseUserRedisAccessControl{ - Categories: []string{"+@set"}, - Channels: []string{"*"}, - Commands: []string{"+set"}, - Keys: []string{"key_*"}, + Categories: &[]string{"+@set"}, + Channels: &[]string{"*"}, + Commands: &[]string{"+set"}, + Keys: &[]string{"key_*"}, }, } assert.Equal(t, want, got) diff --git a/upcloud/request/managed_database_test.go b/upcloud/request/managed_database_test.go index cecba11f..0dba0746 100644 --- a/upcloud/request/managed_database_test.go +++ b/upcloud/request/managed_database_test.go @@ -432,10 +432,10 @@ func TestCreateManagedDatabaseUserRequest(t *testing.T) { AllowReplication: true, }, RedisAccessControl: &upcloud.ManagedDatabaseUserRedisAccessControl{ - Categories: []string{"+@set"}, - Channels: []string{"*"}, - Commands: []string{"+set"}, - Keys: []string{"key_*"}, + Categories: &[]string{"+@set"}, + Channels: &[]string{"*"}, + Commands: &[]string{"+set"}, + Keys: &[]string{"key_*"}, }, } got, err := json.Marshal(&r) @@ -478,10 +478,10 @@ func TestModifyManagedDatabaseUserAccessControlRequest(t *testing.T) { AllowReplication: true, }, RedisAccessControl: &upcloud.ManagedDatabaseUserRedisAccessControl{ - Categories: []string{"+@set"}, - Channels: []string{"*"}, - Commands: []string{"+set"}, - Keys: []string{"key_*"}, + Categories: &[]string{"+@set"}, + Channels: &[]string{"*"}, + Commands: &[]string{"+set"}, + Keys: &[]string{"key_*"}, }, } got, err := json.Marshal(&r) diff --git a/upcloud/service/fixtures/modifymanageddatabaseuseraccesscontrol.yaml b/upcloud/service/fixtures/modifymanageddatabaseuseraccesscontrol.yaml deleted file mode 100644 index 64a69ec6..00000000 --- a/upcloud/service/fixtures/modifymanageddatabaseuseraccesscontrol.yaml +++ /dev/null @@ -1,107 +0,0 @@ ---- -version: 1 -interactions: -- request: - body: '{"hostname_prefix":"modifyuseraccesscontrol","plan":"2x2xCPU-4GB-100GB","properties":{"automatic_utility_network_ip_filter":true,"ip_filter":["10.0.0.1/32"],"public_access":true},"title":"modifyuseraccesscontrol","type":"pg","zone":"fi-hel2","maintenance":{"dow":"monday","time":"12:00:00"}}' - form: {} - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - upcloud-go-api/6.1.1 - url: https://api.upcloud.com/1.3/database - method: POST - response: - body: '{"backups":[],"components":[{"component":"pg","host":"modifyuseraccesscontrol-zhbmidiechch.db.upclouddatabases.com","port":11550,"route":"dynamic","usage":"primary"},{"component":"pg","host":"replica-modifyuseraccesscontrol-zhbmidiechch.db.upclouddatabases.com","port":11550,"route":"dynamic","usage":"replica"},{"component":"pg","host":"public-modifyuseraccesscontrol-zhbmidiechch.db.upclouddatabases.com","port":11550,"route":"public","usage":"primary"},{"component":"pg","host":"public-replica-modifyuseraccesscontrol-zhbmidiechch.db.upclouddatabases.com","port":11550,"route":"public","usage":"replica"},{"component":"pgbouncer","host":"modifyuseraccesscontrol-zhbmidiechch.db.upclouddatabases.com","port":11551,"route":"dynamic","usage":"primary"},{"component":"pgbouncer","host":"replica-modifyuseraccesscontrol-zhbmidiechch.db.upclouddatabases.com","port":11551,"route":"dynamic","usage":"replica"},{"component":"pgbouncer","host":"public-modifyuseraccesscontrol-zhbmidiechch.db.upclouddatabases.com","port":11551,"route":"public","usage":"primary"},{"component":"pgbouncer","host":"public-replica-modifyuseraccesscontrol-zhbmidiechch.db.upclouddatabases.com","port":11551,"route":"public","usage":"replica"}],"create_time":"0001-01-01T00:00:00Z","maintenance":{"dow":"monday","time":"12:00:00","pending_updates":[]},"name":"modifyuseraccesscontrol","node_count":2,"node_states":[],"plan":"2x2xCPU-4GB-100GB","powered":true,"metadata":{"max_connections":100,"pg_version":"15","write_block_threshold_exceeded":null},"properties":{"automatic_utility_network_ip_filter":true,"backup_hour":9,"backup_minute":57,"ip_filter":["10.0.0.1/32"],"pg_stat_monitor_enable":false,"pglookout":{"max_failover_replication_time_lag":60},"public_access":true,"version":"15"},"uuid":"092bcf63-a048-4f9e-8c9e-78df7b47a2b0","state":"rebuilding","title":"modifyuseraccesscontrol","type":"pg","update_time":"0001-01-01T00:00:00Z","service_uri":"postgres://upadmin:AVNS_LvKiHxtFix4ebKUJc-N@modifyuseraccesscontrol-zhbmidiechch.db.upclouddatabases.com:11550/defaultdb?sslmode=require","service_uri_params":{"dbname":"defaultdb","host":"modifyuseraccesscontrol-zhbmidiechch.db.upclouddatabases.com","password":"AVNS_LvKiHxtFix4ebKUJc-N","port":"11550","ssl_mode":"require","user":"upadmin"},"users":[{"username":"upadmin","type":"primary"}],"databases":[{"name":"defaultdb"}],"zone":"fi-hel2"}' - headers: - Access-Control-Allow-Origin: - - '*' - Content-Type: - - application/json - Date: - - Wed, 17 May 2023 07:19:36 GMT - Strict-Transport-Security: - - max-age=63072000 - status: 200 OK - code: 200 - duration: "" -- request: - body: '{"username":"demouser","pg_access_control":{"allow_replication":true}}' - form: {} - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - upcloud-go-api/6.1.1 - url: https://api.upcloud.com/1.3/database/092bcf63-a048-4f9e-8c9e-78df7b47a2b0/users - method: POST - response: - body: '{"username":"demouser","password":"AVNS_KpdUyRRMVtG-Rqh9e45","type":"normal","pg_access_control":{"allow_replication":true}}' - headers: - Access-Control-Allow-Origin: - - '*' - Content-Length: - - "124" - Content-Type: - - application/json - Date: - - Wed, 17 May 2023 07:24:40 GMT - Strict-Transport-Security: - - max-age=63072000 - status: 200 OK - code: 200 - duration: "" -- request: - body: '{"pg_access_control":{"allow_replication":false}}' - form: {} - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - upcloud-go-api/6.1.1 - url: https://api.upcloud.com/1.3/database/092bcf63-a048-4f9e-8c9e-78df7b47a2b0/users/demouser/access-control - method: PATCH - response: - body: '{"username":"demouser","password":"AVNS_KpdUyRRMVtG-Rqh9e45","type":"normal","pg_access_control":{"allow_replication":false}}' - headers: - Access-Control-Allow-Origin: - - '*' - Content-Length: - - "125" - Content-Type: - - application/json - Date: - - Wed, 17 May 2023 07:24:40 GMT - Strict-Transport-Security: - - max-age=63072000 - status: 200 OK - code: 200 - duration: "" -- request: - body: "" - form: {} - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - upcloud-go-api/6.1.1 - url: https://api.upcloud.com/1.3/database/092bcf63-a048-4f9e-8c9e-78df7b47a2b0 - method: DELETE - response: - body: "" - headers: - Date: - - Wed, 17 May 2023 07:24:41 GMT - Strict-Transport-Security: - - max-age=63072000 - status: 204 No Content - code: 204 - duration: "" diff --git a/upcloud/service/fixtures/modifymanageddatabaseuseraccesscontrolos.yaml b/upcloud/service/fixtures/modifymanageddatabaseuseraccesscontrolos.yaml deleted file mode 100644 index 0fa1f922..00000000 --- a/upcloud/service/fixtures/modifymanageddatabaseuseraccesscontrolos.yaml +++ /dev/null @@ -1,109 +0,0 @@ ---- -version: 1 -interactions: -- request: - body: '{"hostname_prefix":"modifyuseraccesscontrolos","plan":"1x2xCPU-4GB-80GB-1D","properties":{"automatic_utility_network_ip_filter":true,"ip_filter":["10.0.0.1/32"],"public_access":true},"title":"modifyuseraccesscontrolos","type":"opensearch","zone":"fi-hel2","maintenance":{"dow":"monday","time":"12:00:00"}}' - form: {} - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - upcloud-go-api/6.1.1 - url: https://api.upcloud.com/1.3/database - method: POST - response: - body: '{"backups":[],"components":[{"component":"opensearch","host":"modifyuseraccesscontrolos-zhbmidiechch.db.upclouddatabases.com","port":11550,"route":"dynamic","usage":"primary"},{"component":"opensearch","host":"public-modifyuseraccesscontrolos-zhbmidiechch.db.upclouddatabases.com","port":11550,"route":"public","usage":"primary"},{"component":"opensearch_dashboards","host":"modifyuseraccesscontrolos-zhbmidiechch.db.upclouddatabases.com","port":443,"route":"dynamic","usage":"primary"},{"component":"opensearch_dashboards","host":"public-modifyuseraccesscontrolos-zhbmidiechch.db.upclouddatabases.com","port":443,"route":"public","usage":"primary"}],"create_time":"0001-01-01T00:00:00Z","maintenance":{"dow":"monday","time":"12:00:00","pending_updates":[]},"name":"modifyuseraccesscontrolos","node_count":1,"node_states":[],"plan":"1x2xCPU-4GB-80GB-1D","powered":true,"metadata":{"opensearch_version":"2","upgrade_version":null},"properties":{"automatic_utility_network_ip_filter":true,"ip_filter":["10.0.0.1/32"],"max_index_count":0,"public_access":true,"version":"2"},"uuid":"0945b8a5-1f38-48d9-b438-0dc28d54bd23","state":"rebuilding","title":"modifyuseraccesscontrolos","type":"opensearch","update_time":"0001-01-01T00:00:00Z","service_uri":"https://upadmin:AVNS_zU4CN-VSleXdVdfPUxG@modifyuseraccesscontrolos-zhbmidiechch.db.upclouddatabases.com:11550","service_uri_params":{"host":"modifyuseraccesscontrolos-zhbmidiechch.db.upclouddatabases.com","password":"AVNS_zU4CN-VSleXdVdfPUxG","port":"11550","user":"upadmin"},"users":[{"username":"upadmin","type":"primary"}],"zone":"fi-hel2"}' - headers: - Access-Control-Allow-Origin: - - '*' - Content-Length: - - "1589" - Content-Type: - - application/json - Date: - - Wed, 17 May 2023 07:41:15 GMT - Strict-Transport-Security: - - max-age=63072000 - status: 200 OK - code: 200 - duration: "" -- request: - body: '{"username":"demouser","opensearch_access_control":{"rules":[{"index":"index_1","permission":"readwrite"}]}}' - form: {} - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - upcloud-go-api/6.1.1 - url: https://api.upcloud.com/1.3/database/0945b8a5-1f38-48d9-b438-0dc28d54bd23/users - method: POST - response: - body: '{"username":"demouser","password":"AVNS_FbytqpIQZ91cy13xAzQ","type":"normal","opensearch_access_control":{"rules":[{"index":"index_1","permission":"readwrite"}]}}' - headers: - Access-Control-Allow-Origin: - - '*' - Content-Length: - - "162" - Content-Type: - - application/json - Date: - - Wed, 17 May 2023 07:44:06 GMT - Strict-Transport-Security: - - max-age=63072000 - status: 200 OK - code: 200 - duration: "" -- request: - body: '{"opensearch_access_control":{"rules":[{"index":"index_1","permission":"read"}]}}' - form: {} - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - upcloud-go-api/6.1.1 - url: https://api.upcloud.com/1.3/database/0945b8a5-1f38-48d9-b438-0dc28d54bd23/users/demouser/access-control - method: PATCH - response: - body: '{"username":"demouser","password":"AVNS_FbytqpIQZ91cy13xAzQ","type":"normal","opensearch_access_control":{"rules":[{"index":"index_1","permission":"read"}]}}' - headers: - Access-Control-Allow-Origin: - - '*' - Content-Length: - - "157" - Content-Type: - - application/json - Date: - - Wed, 17 May 2023 07:44:06 GMT - Strict-Transport-Security: - - max-age=63072000 - status: 200 OK - code: 200 - duration: "" -- request: - body: "" - form: {} - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - upcloud-go-api/6.1.1 - url: https://api.upcloud.com/1.3/database/0945b8a5-1f38-48d9-b438-0dc28d54bd23 - method: DELETE - response: - body: "" - headers: - Date: - - Wed, 17 May 2023 07:44:07 GMT - Strict-Transport-Security: - - max-age=63072000 - status: 204 No Content - code: 204 - duration: "" diff --git a/upcloud/service/fixtures/modifymanageddatabaseuseropensearchaccesscontrol.yaml b/upcloud/service/fixtures/modifymanageddatabaseuseropensearchaccesscontrol.yaml new file mode 100644 index 00000000..6193932e --- /dev/null +++ b/upcloud/service/fixtures/modifymanageddatabaseuseropensearchaccesscontrol.yaml @@ -0,0 +1,129 @@ +--- +version: 1 +interactions: +- request: + body: '{"hostname_prefix":"modifyuseraccesscontrolos","plan":"1x2xCPU-4GB-80GB-1D","properties":{"automatic_utility_network_ip_filter":true,"ip_filter":["10.0.0.1/32"],"public_access":true},"title":"modifyuseraccesscontrolos","type":"opensearch","zone":"fi-hel2","maintenance":{"dow":"monday","time":"12:00:00"}}' + form: {} + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - upcloud-go-api/6.12.0 + url: https://api.upcloud.com/1.3/database + method: POST + response: + body: '{"uuid":"09a46797-93b3-4cec-afd9-7bca62f71dc0","zone":"fi-hel2","name":"modifyuseraccesscontrolos","title":"modifyuseraccesscontrolos","type":"opensearch","plan":"1x2xCPU-4GB-80GB-1D","state":"pending","powered":true,"termination_protection":false,"node_count":1,"create_time":"2024-01-25T14:58:38Z","update_time":"2024-01-25T14:58:38Z","service_uri":"","service_uri_params":{},"maintenance":{"dow":"monday","time":"12:00:00","pending_updates":[]},"metadata":{},"properties":{"automatic_utility_network_ip_filter":true,"ip_filter":["10.0.0.1/32"],"public_access":true},"networks":[],"node_states":[],"backups":[],"components":[],"users":[]}' + headers: + Content-Length: + - "640" + Content-Type: + - application/json + Date: + - Thu, 25 Jan 2024 14:58:38 GMT + Strict-Transport-Security: + - max-age=63072000 + status: 201 Created + code: 201 + duration: "" +- request: + body: '{"username":"demouser","opensearch_access_control":{"rules":[{"index":"index_1","permission":"readwrite"}]}}' + form: {} + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - upcloud-go-api/6.12.0 + url: https://api.upcloud.com/1.3/database/09a46797-93b3-4cec-afd9-7bca62f71dc0/users + method: POST + response: + body: '{"username":"demouser","password":"AVNS_XuxX0BnzMNq_-CF_V_d","type":"normal","opensearch_access_control":{"rules":[{"index":"index_1","permission":"readwrite"}]}}' + headers: + Content-Length: + - "162" + Content-Type: + - application/json + Date: + - Thu, 25 Jan 2024 15:03:54 GMT + Strict-Transport-Security: + - max-age=63072000 + status: 201 Created + code: 201 + duration: "" +- request: + body: '{"opensearch_access_control":{"rules":[{"index":"index_1","permission":"read"}]}}' + form: {} + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - upcloud-go-api/6.12.0 + url: https://api.upcloud.com/1.3/database/09a46797-93b3-4cec-afd9-7bca62f71dc0/users/demouser/access-control + method: PATCH + response: + body: '{"username":"demouser","password":"AVNS_XuxX0BnzMNq_-CF_V_d","type":"normal","opensearch_access_control":{"rules":[{"index":"index_1","permission":"read"}]}}' + headers: + Content-Length: + - "157" + Content-Type: + - application/json + Date: + - Thu, 25 Jan 2024 15:03:55 GMT + Strict-Transport-Security: + - max-age=63072000 + status: 200 OK + code: 200 + duration: "" +- request: + body: '{"opensearch_access_control":{"rules":[]}}' + form: {} + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - upcloud-go-api/6.12.0 + url: https://api.upcloud.com/1.3/database/09a46797-93b3-4cec-afd9-7bca62f71dc0/users/demouser/access-control + method: PATCH + response: + body: '{"username":"demouser","password":"AVNS_XuxX0BnzMNq_-CF_V_d","type":"normal","opensearch_access_control":{"rules":[]}}' + headers: + Content-Length: + - "118" + Content-Type: + - application/json + Date: + - Thu, 25 Jan 2024 15:03:56 GMT + Strict-Transport-Security: + - max-age=63072000 + status: 200 OK + code: 200 + duration: "" +- request: + body: "" + form: {} + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - upcloud-go-api/6.12.0 + url: https://api.upcloud.com/1.3/database/09a46797-93b3-4cec-afd9-7bca62f71dc0 + method: DELETE + response: + body: "" + headers: + Date: + - Thu, 25 Jan 2024 15:03:56 GMT + Strict-Transport-Security: + - max-age=63072000 + status: 204 No Content + code: 204 + duration: "" diff --git a/upcloud/service/fixtures/modifymanageddatabaseuserpostgreqlsaccesscontrol.yaml b/upcloud/service/fixtures/modifymanageddatabaseuserpostgreqlsaccesscontrol.yaml new file mode 100644 index 00000000..fbdc5670 --- /dev/null +++ b/upcloud/service/fixtures/modifymanageddatabaseuserpostgreqlsaccesscontrol.yaml @@ -0,0 +1,103 @@ +--- +version: 1 +interactions: +- request: + body: '{"hostname_prefix":"modifyuseraccesscontrol","plan":"2x2xCPU-4GB-100GB","properties":{"automatic_utility_network_ip_filter":true,"ip_filter":["10.0.0.1/32"],"public_access":true},"title":"modifyuseraccesscontrol","type":"pg","zone":"fi-hel2","maintenance":{"dow":"monday","time":"12:00:00"}}' + form: {} + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - upcloud-go-api/6.12.0 + url: https://api.upcloud.com/1.3/database + method: POST + response: + body: '{"uuid":"099b0bca-8901-4475-b7e5-b44cb09ec5af","zone":"fi-hel2","name":"modifyuseraccesscontrol","title":"modifyuseraccesscontrol","type":"pg","plan":"2x2xCPU-4GB-100GB","state":"pending","powered":true,"termination_protection":false,"node_count":2,"create_time":"2024-01-25T14:48:02Z","update_time":"2024-01-25T14:48:02Z","service_uri":"","service_uri_params":{},"maintenance":{"dow":"monday","time":"12:00:00","pending_updates":[]},"metadata":{},"properties":{"automatic_utility_network_ip_filter":true,"ip_filter":["10.0.0.1/32"],"public_access":true},"networks":[],"node_states":[],"backups":[],"components":[],"users":[],"databases":[]}' + headers: + Content-Length: + - "641" + Content-Type: + - application/json + Date: + - Thu, 25 Jan 2024 14:48:02 GMT + Strict-Transport-Security: + - max-age=63072000 + status: 201 Created + code: 201 + duration: "" +- request: + body: '{"username":"demouser","pg_access_control":{"allow_replication":true}}' + form: {} + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - upcloud-go-api/6.12.0 + url: https://api.upcloud.com/1.3/database/099b0bca-8901-4475-b7e5-b44cb09ec5af/users + method: POST + response: + body: '{"username":"demouser","password":"AVNS_Y2dS9AeyxEksRmQv5Px","type":"normal","pg_access_control":{"allow_replication":true}}' + headers: + Content-Length: + - "124" + Content-Type: + - application/json + Date: + - Thu, 25 Jan 2024 14:54:34 GMT + Strict-Transport-Security: + - max-age=63072000 + status: 201 Created + code: 201 + duration: "" +- request: + body: '{"pg_access_control":{"allow_replication":false}}' + form: {} + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - upcloud-go-api/6.12.0 + url: https://api.upcloud.com/1.3/database/099b0bca-8901-4475-b7e5-b44cb09ec5af/users/demouser/access-control + method: PATCH + response: + body: '{"username":"demouser","password":"AVNS_Y2dS9AeyxEksRmQv5Px","type":"normal","pg_access_control":{"allow_replication":false}}' + headers: + Content-Length: + - "125" + Content-Type: + - application/json + Date: + - Thu, 25 Jan 2024 14:54:35 GMT + Strict-Transport-Security: + - max-age=63072000 + status: 200 OK + code: 200 + duration: "" +- request: + body: "" + form: {} + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - upcloud-go-api/6.12.0 + url: https://api.upcloud.com/1.3/database/099b0bca-8901-4475-b7e5-b44cb09ec5af + method: DELETE + response: + body: "" + headers: + Date: + - Thu, 25 Jan 2024 14:54:36 GMT + Strict-Transport-Security: + - max-age=63072000 + status: 204 No Content + code: 204 + duration: "" diff --git a/upcloud/service/fixtures/modifymanageddatabaseuserredisaccesscontrol.yaml b/upcloud/service/fixtures/modifymanageddatabaseuserredisaccesscontrol.yaml new file mode 100644 index 00000000..bdb910d3 --- /dev/null +++ b/upcloud/service/fixtures/modifymanageddatabaseuserredisaccesscontrol.yaml @@ -0,0 +1,103 @@ +--- +version: 1 +interactions: +- request: + body: '{"hostname_prefix":"modifyuseraccesscontrolredis","plan":"1x1xCPU-2GB","properties":{"automatic_utility_network_ip_filter":true,"ip_filter":["10.0.0.1/32"],"public_access":true},"title":"modifyuseraccesscontrolredis","type":"redis","zone":"fi-hel2","maintenance":{"dow":"monday","time":"12:00:00"}}' + form: {} + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - upcloud-go-api/6.12.0 + url: https://api.upcloud.com/1.3/database + method: POST + response: + body: '{"uuid":"090350e8-610d-4ee7-a6c3-b5bce1993a87","zone":"fi-hel2","name":"modifyuseraccesscontrolredis","title":"modifyuseraccesscontrolredis","type":"redis","plan":"1x1xCPU-2GB","state":"pending","powered":true,"termination_protection":false,"node_count":1,"create_time":"2024-01-25T14:40:26Z","update_time":"2024-01-25T14:40:26Z","service_uri":"","service_uri_params":{},"maintenance":{"dow":"monday","time":"12:00:00","pending_updates":[]},"metadata":{},"properties":{"automatic_utility_network_ip_filter":true,"ip_filter":["10.0.0.1/32"],"public_access":true},"networks":[],"node_states":[],"backups":[],"components":[],"users":[]}' + headers: + Content-Length: + - "633" + Content-Type: + - application/json + Date: + - Thu, 25 Jan 2024 14:40:26 GMT + Strict-Transport-Security: + - max-age=63072000 + status: 201 Created + code: 201 + duration: "" +- request: + body: '{"username":"demouser","redis_access_control":{"categories":["+@set"],"channels":["*"],"commands":["+set"],"keys":["key_*"]}}' + form: {} + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - upcloud-go-api/6.12.0 + url: https://api.upcloud.com/1.3/database/090350e8-610d-4ee7-a6c3-b5bce1993a87/users + method: POST + response: + body: '{"username":"demouser","password":"AVNS_cKoFIpdpEFvy_DAoAdB","type":"normal","redis_access_control":{"categories":["+@set"],"channels":["*"],"commands":["+set"],"keys":["key_*"]}}' + headers: + Content-Length: + - "179" + Content-Type: + - application/json + Date: + - Thu, 25 Jan 2024 14:43:35 GMT + Strict-Transport-Security: + - max-age=63072000 + status: 201 Created + code: 201 + duration: "" +- request: + body: '{"redis_access_control":{"categories":[],"channels":[],"commands":[],"keys":["key_*"]}}' + form: {} + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - upcloud-go-api/6.12.0 + url: https://api.upcloud.com/1.3/database/090350e8-610d-4ee7-a6c3-b5bce1993a87/users/demouser/access-control + method: PATCH + response: + body: '{"username":"demouser","password":"AVNS_cKoFIpdpEFvy_DAoAdB","type":"regular","redis_access_control":{"categories":[],"channels":[],"commands":[],"keys":["key_*"]}}' + headers: + Content-Length: + - "164" + Content-Type: + - application/json + Date: + - Thu, 25 Jan 2024 14:43:36 GMT + Strict-Transport-Security: + - max-age=63072000 + status: 200 OK + code: 200 + duration: "" +- request: + body: "" + form: {} + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - upcloud-go-api/6.12.0 + url: https://api.upcloud.com/1.3/database/090350e8-610d-4ee7-a6c3-b5bce1993a87 + method: DELETE + response: + body: "" + headers: + Date: + - Thu, 25 Jan 2024 14:43:37 GMT + Strict-Transport-Security: + - max-age=63072000 + status: 204 No Content + code: 204 + duration: "" diff --git a/upcloud/service/managed_database_test.go b/upcloud/service/managed_database_test.go index 040b79a9..61cbfda9 100644 --- a/upcloud/service/managed_database_test.go +++ b/upcloud/service/managed_database_test.go @@ -729,8 +729,8 @@ func TestService_GetManagedDatabaseServiceTypes(t *testing.T) { }) } -func TestService_ModifyManagedDatabaseUserAccessControl(t *testing.T) { - record(t, "modifymanageddatabaseuseraccesscontrol", func(ctx context.Context, t *testing.T, rec *recorder.Recorder, svc *Service) { +func TestService_ModifyManagedDatabaseUserPostgreSQLAccessControl(t *testing.T) { + record(t, "modifymanageddatabaseuserpostgreqlsaccesscontrol", func(ctx context.Context, t *testing.T, rec *recorder.Recorder, svc *Service) { db, err := svc.CreateManagedDatabase(ctx, getTestCreateRequest("modifyuseraccesscontrol", upcloud.ManagedDatabaseServiceTypePostgreSQL)) if !assert.NoError(t, err) { return @@ -770,7 +770,7 @@ func TestService_ModifyManagedDatabaseUserAccessControl(t *testing.T) { } func TestService_ModifyManagedDatabaseUserOpenSearchAccessControl(t *testing.T) { - record(t, "modifymanageddatabaseuseraccesscontrolos", func(ctx context.Context, t *testing.T, rec *recorder.Recorder, svc *Service) { + record(t, "modifymanageddatabaseuseropensearchaccesscontrol", func(ctx context.Context, t *testing.T, rec *recorder.Recorder, svc *Service) { db, err := svc.CreateManagedDatabase(ctx, getTestCreateRequest("modifyuseraccesscontrolos", upcloud.ManagedDatabaseServiceTypeOpenSearch)) if !assert.NoError(t, err) { return @@ -818,6 +818,70 @@ func TestService_ModifyManagedDatabaseUserOpenSearchAccessControl(t *testing.T) } assert.Equal(t, "index_1", user.OpenSearchAccessControl.Rules[0].Index) assert.Equal(t, "read", string(user.OpenSearchAccessControl.Rules[0].Permission)) + + user, err = svc.ModifyManagedDatabaseUserAccessControl(ctx, &request.ModifyManagedDatabaseUserAccessControlRequest{ + ServiceUUID: db.UUID, + Username: user.Username, + OpenSearchAccessControl: &upcloud.ManagedDatabaseUserOpenSearchAccessControl{ + Rules: []upcloud.ManagedDatabaseUserOpenSearchAccessControlRule{}, + }, + }) + if !assert.NoError(t, err) { + return + } + assert.Len(t, user.OpenSearchAccessControl.Rules, 0) + }) +} + +func TestService_ModifyManagedDatabaseUserRedisAccessControl(t *testing.T) { + record(t, "modifymanageddatabaseuserredisaccesscontrol", func(ctx context.Context, t *testing.T, rec *recorder.Recorder, svc *Service) { + db, err := svc.CreateManagedDatabase(ctx, getTestCreateRequest("modifyuseraccesscontrolredis", upcloud.ManagedDatabaseServiceTypeRedis)) + if !assert.NoError(t, err) { + return + } + defer func() { + if err := svc.DeleteManagedDatabase(ctx, &request.DeleteManagedDatabaseRequest{UUID: db.UUID}); err != nil { + t.Log(err) + } + }() + if !assert.NoError(t, waitForManagedDatabaseRunningState(ctx, rec, svc, db.UUID)) { + return + } + user, err := svc.CreateManagedDatabaseUser(ctx, &request.CreateManagedDatabaseUserRequest{ + ServiceUUID: db.UUID, + Username: "demouser", + RedisAccessControl: &upcloud.ManagedDatabaseUserRedisAccessControl{ + Categories: &[]string{"+@set"}, + Channels: &[]string{"*"}, + Commands: &[]string{"+set"}, + Keys: &[]string{"key_*"}, + }, + }) + if !assert.NoError(t, err) { + return + } + assert.Equal(t, []string{"+@set"}, *user.RedisAccessControl.Categories) + assert.Equal(t, []string{"*"}, *user.RedisAccessControl.Channels) + assert.Equal(t, []string{"+set"}, *user.RedisAccessControl.Commands) + assert.Equal(t, []string{"key_*"}, *user.RedisAccessControl.Keys) + + user, err = svc.ModifyManagedDatabaseUserAccessControl(ctx, &request.ModifyManagedDatabaseUserAccessControlRequest{ + ServiceUUID: db.UUID, + Username: user.Username, + RedisAccessControl: &upcloud.ManagedDatabaseUserRedisAccessControl{ + Categories: &[]string{}, + Channels: &[]string{}, + Commands: &[]string{}, + Keys: &[]string{"key_*"}, + }, + }) + if !assert.NoError(t, err) { + return + } + assert.Equal(t, []string{}, *user.RedisAccessControl.Categories) + assert.Equal(t, []string{}, *user.RedisAccessControl.Channels) + assert.Equal(t, []string{}, *user.RedisAccessControl.Commands) + assert.Equal(t, []string{"key_*"}, *user.RedisAccessControl.Keys) }) }