-
Notifications
You must be signed in to change notification settings - Fork 18
fix(policy): properly formatted pem in test fixtures #2409
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hello @strantalis, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!
Summary of Changes
Hello! Gemini here, providing a summary of this pull request. This PR primarily focuses on refining the test fixtures and integration tests related to KAS (Key Access Server) keys and provider configurations. The main intent seems to be to correctly handle cases where a KAS key might not have an associated provider configuration ID and to update the fixture data with more realistic or properly formatted key contexts. Additionally, it includes some minor cleanup and improvements to the test environment setup.
Highlights
- KAS Key Fixtures Update: The structure for KAS key fixtures (
FixtureDataKasRegistryKey
) has been updated to make theProviderConfigID
field a pointer (*string
), allowing it to be nil. The fixture data itself (policy_fixtures.yaml
) has been updated with new key IDs (rsa_key_1
,ec_key_1
), different algorithms (RSA and EC), and seemingly more complete base64 encoded private and public key contexts. - Integration Test Adjustments: Integration tests for the KAS registry key functionality (
kas_registry_key_test.go
) have been modified to correctly handle the nullableProviderConfigID
. Assertions comparingProviderConfigID
now dereference the pointer (*s.kasKeys[0].ProviderConfigID
). ThevalidateListKeysResponse
helper function was updated to accept an expected number of keys and check for nilProviderConfigID
in the response. SomeListKeys
test assertions were adjusted for expected counts and pagination offsets. - Test Environment Setup Improvement: The main test setup (
main_test.go
) for the Postgres test container has been improved by adding a random suffix to the container name usinguuid
to prevent naming conflicts during parallel test runs. The explicit host port binding has been removed, allowing testcontainers to assign a dynamic port. The SQL wait timeout has been increased from 5s to 60s, and the wait query simplified toSELECT 1
. - Configuration File Tweaks: Minor configuration changes were made in
opentdf-dev.yaml
andopentdf-kas-mode.yaml
, addingpreview
androot_key
settings under thekas
section and changing single quotes to double quotes for string values inopentdf-kas-mode.yaml
.
Changelog
Click here to see the changelog
- opentdf-dev.yaml
- Added
preview
androot_key
configuration under thekas
service. - Adjusted spacing in commented-out sections.
- Added
- opentdf-kas-mode.yaml
- Added
preview
androot_key
configuration under thekas
service. - Changed single quotes to double quotes for
audience
andallowedorigins
values.
- Added
- service/integration/kas_registry_key_test.go
- Updated assertions in
Test_GetKasKeyById_Success
,Test_GetKasKeyByKeyId_Success
,Test_GetKasKey_WithKasName_Success
, andTest_GetKasKey_WithKasUri_Success
to dereference theProviderConfigID
pointer. - Adjusted expected key counts in
Test_ListKeys_KasID_Success
,Test_ListKeys_KasName_Success
,Test_ListKeys_KasURI_Success
, andTest_ListKeys_FilterAlgo_TwoKeys_Success
. - Corrected the expected
NextOffset
inTest_ListKeys_KasID_Limit_Success
. - Modified
validateListKeysResponse
function signature to accept expected number of keys and updated the assertion. - Added a check for nil
ProviderConfigID
in thevalidateListKeysResponse
helper.
- Updated assertions in
- service/integration/main_test.go
- Removed unused import
github.com/docker/docker/api/types/container
. - Added import
github.com/google/uuid
. - Added a random suffix to the Postgres test container name using
uuid
. - Removed explicit
HostConfigModifier
for port binding. - Increased the SQL wait timeout from 5s to 60s and simplified the wait query to
SELECT 1
.
- Removed unused import
- service/internal/fixtures/fixtures.go
- Changed the type of
ProviderConfigID
inFixtureDataKasRegistryKey
struct fromstring
to*string
(pointer). - Updated the
provisionKasRegistryKeys
function to handle nilProviderConfigID
pointers by inserting 'NULL' into the SQL.
- Changed the type of
- service/internal/fixtures/policy_fixtures.yaml
- Removed some empty lines for cleaner formatting.
- Updated the
key_id
forkas_key_1
torsa_key_1
. - Updated the
key_algorithm
forkas_key_2
toALGORITHM_EC_P256
and itskey_id
toec_key_1
. - Updated the
private_key_ctx
andpublic_key_ctx
values for both KAS keys with new base64 encoded data. - Implicitly made
provider_config_id
optional for KAS keys by changing the struct field to a pointer.
Using Gemini Code Assist
The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.
Invoking Gemini
You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command>
or @gemini-code-assist <command>
. Below is a summary of the supported commands.
Feature | Command | Description |
---|---|---|
Code Review | /gemini review |
Performs a code review for the current pull request in its current state. |
Pull Request Summary | /gemini summary |
Provides a summary of the current pull request in its current state. |
Comment | @gemini-code-assist | Responds in comments when explicitly tagged, both in issue comments and review comments. |
Help | /gemini help |
Displays a list of available commands. |
Customization
To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/
folder in the base of the repository. Detailed instructions can be found here.
Limitations & Feedback
Gemini Code Assist is currently in preview and may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments to provide feedback.
You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.
Fixtures fine-tuned,
Keys now nullable, tests pass,
Code review awaits.
Footnotes
-
Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code Review
This pull request correctly addresses the PEM formatting in test fixtures and introduces several related improvements, such as making ProviderConfigID
optional and enhancing test container stability. The changes are generally positive. However, there are a few areas that need attention, particularly concerning a hardcoded root_key
in development configurations and some test assertions that could be more robust or might indicate a misunderstanding of the underlying logic.
Summary of Findings
- Hardcoded Root Key: The
root_key
is hardcoded inopentdf-dev.yaml
andopentdf-kas-mode.yaml
. This could be a security risk if these configurations are used in environments beyond isolated local development. It's recommended to clarify its purpose and consider using environment variables or secrets management. - Test Robustness for Optional Fields: In
service/integration/kas_registry_key_test.go
,ProviderConfigID
(which is now a pointer) is dereferenced in several test assertions without a prior nil check. While current fixtures might prevent a panic, this is not robust. The pattern invalidateListKeysResponse
(checking for nil) should be applied more broadly. - Pagination Logic in Test: An assertion for
next_offset
inTest_ListKeys_KasID_Limit_Success
inkas_registry_key_test.go
appears to contradict typical pagination logic where more items are available. This needs clarification. - YAML Formatting: Minor stylistic changes were made to YAML files (spacing around comments, quote style). These improve consistency but were not commented on directly due to severity settings.
- Testcontainer Setup Improvements: Changes in
service/integration/main_test.go
(randomized container names, dynamic port mapping for PostgreSQL, increased startup timeout) are good improvements for test stability and CI compatibility. - Fixture Data Handling: The change to make
ProviderConfigID
inFixtureDataKasRegistryKey
a pointer and the corresponding update inprovisionKasRegistryKeys
to handle SQL NULL values are correctly implemented.
Merge Readiness
The pull request addresses the intended fix for PEM formatting in test fixtures and includes several beneficial updates. However, before merging, I recommend addressing the concerns raised, particularly:
- Clarifying the nature of the hardcoded
root_key
in YAML configurations. - Improving the robustness of test assertions in
kas_registry_key_test.go
by adding nil checks before dereferencing optional fields. - Reviewing the pagination logic or test assertion for
next_offset
inTest_ListKeys_KasID_Limit_Success
.
Once these medium-severity issues are addressed, the PR should be in a much better state for merging. As an AI, I am not authorized to approve pull requests; please ensure further review and approval from team members.
preview: | ||
ec_tdf_enabled: false | ||
key_management: false | ||
root_key: a8c4824daafcfa38ed0d13002e92b08720e6c4fcee67d52e954c1a6e045907d1 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The root_key
is hardcoded in this development configuration file. While this might be acceptable for local development or testing, could you clarify if this key is a placeholder or has any sensitivity? For production or shared environments, it's crucial to manage such keys via environment variables or a secrets management system to avoid committing sensitive information to the repository. Even for development, using a placeholder value that's clearly identifiable as such (e.g., placeholder-dev-root-key
) or sourcing it from environment variables can be a good practice.
preview: | ||
ec_tdf_enabled: false | ||
key_management: false | ||
root_key: a8c4824daafcfa38ed0d13002e92b08720e6c4fcee67d52e954c1a6e045907d1 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Similar to opentdf-dev.yaml
, this root_key
is hardcoded. Could you confirm its nature? If it's sensitive or intended for more than just isolated local testing, please consider managing it through environment variables or a secrets manager. Using a consistent, clearly non-production placeholder or environment variable sourcing is recommended even for dev-focused configurations.
@@ -180,7 +180,7 @@ func (s *KasRegistryKeySuite) Test_GetKasKeyById_Success() { | |||
s.NotNil(resp) | |||
s.Equal(s.kasKeys[0].KeyAccessServerID, resp.GetKasId()) | |||
s.Equal(s.kasKeys[0].ID, resp.GetKey().GetId()) | |||
s.Equal(s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId()) | |||
s.Equal(*s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here, s.kasKeys[0].ProviderConfigID
is dereferenced directly. While the current fixture for kas_key_1
(which s.kasKeys[0]
likely refers to) has a ProviderConfigID
, this direct dereference could lead to a panic if the fixture were to change or if this pattern is used for keys where ProviderConfigID
might be nil.
Consider adopting the safer pattern used in validateListKeysResponse
(lines 1354-1358) to check for nil before dereferencing. For example:
if s.kasKeys[0].ProviderConfigID == nil {
s.Nil(resp.GetKey().GetProviderConfig())
} else {
s.Equal(*s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId())
}
This would make the test more robust to changes in fixture data.
if s.kasKeys[0].ProviderConfigID == nil {
s.Nil(resp.GetKey().GetProviderConfig())
} else {
s.Equal(*s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId())
}
@@ -232,7 +232,7 @@ | |||
s.Equal(s.kasKeys[0].KeyAccessServerID, resp.GetKasId()) | |||
s.Equal(s.kasKeys[0].ID, resp.GetKey().GetId()) | |||
validatePrivatePublicCtx(&s.Suite, []byte(s.kasKeys[0].PrivateKeyCtx), []byte(s.kasKeys[0].PublicKeyCtx), resp) | |||
s.Equal(s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId()) | |||
s.Equal(*s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Similar to the comment on line 183, *s.kasKeys[0].ProviderConfigID
is dereferenced. It's safer to check if s.kasKeys[0].ProviderConfigID
is nil before dereferencing to prevent potential panics if the fixture data changes. The approach in validateListKeysResponse
is a good example of robust handling.
if s.kasKeys[0].ProviderConfigID == nil {
s.Nil(resp.GetKey().GetProviderConfig())
} else {
s.Equal(*s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId())
}
@@ -255,7 +255,7 @@ | |||
s.Equal(s.kasKeys[0].KeyAccessServerID, resp.GetKasId()) | |||
s.Equal(s.kasKeys[0].ID, resp.GetKey().GetId()) | |||
validatePrivatePublicCtx(&s.Suite, []byte(s.kasKeys[0].PrivateKeyCtx), []byte(s.kasKeys[0].PublicKeyCtx), resp) | |||
s.Equal(s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId()) | |||
s.Equal(*s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Again, *s.kasKeys[0].ProviderConfigID
is dereferenced. Please consider adding a nil check for s.kasKeys[0].ProviderConfigID
before dereferencing to improve test robustness, as done in validateListKeysResponse
.
if s.kasKeys[0].ProviderConfigID == nil {
s.Nil(resp.GetKey().GetProviderConfig())
} else {
s.Equal(*s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId())
}
@@ -279,7 +279,7 @@ | |||
s.Equal(s.kasKeys[0].ID, resp.GetKey().GetId()) | |||
validatePrivatePublicCtx(&s.Suite, []byte(s.kasKeys[0].PrivateKeyCtx), []byte(s.kasKeys[0].PublicKeyCtx), resp) | |||
s.Require().NoError(err) | |||
s.Equal(s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId()) | |||
s.Equal(*s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This line also dereferences *s.kasKeys[0].ProviderConfigID
. A nil check before dereferencing s.kasKeys[0].ProviderConfigID
would make this assertion more robust against fixture changes.
if s.kasKeys[0].ProviderConfigID == nil {
s.Nil(resp.GetKey().GetProviderConfig())
} else {
s.Equal(*s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId())
}
@@ -387,7 +387,7 @@ | |||
s.NotNil(resp) | |||
s.Len(resp.GetKasKeys(), 1) | |||
s.GreaterOrEqual(int32(2), resp.GetPagination().GetTotal()) | |||
s.Equal(int32(1), resp.GetPagination().GetNextOffset()) | |||
s.Equal(int32(0), resp.GetPagination().GetNextOffset()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The assertion for resp.GetPagination().GetNextOffset()
has changed from int32(1)
to int32(0)
.
Given:
limit = 1
(fromreq.Pagination
)currentOffset = 0
(asserted on line 391)total >= 2
(asserted bys.GreaterOrEqual(int32(2), resp.GetPagination().GetTotal())
on line 389)
If total
is, for example, 2, then currentOffset (0) + limit (1) < total (2)
(i.e., 1 < 2
) is true. In this scenario, the nextOffset
is typically currentOffset + limit
, which would be 1
.
Could you clarify the expected pagination logic here or why nextOffset
is expected to be 0
when total >= 2
and only the first item of the page is fetched?
@@ -13,6 +13,10 @@ logger: | |||
output: stdout | |||
services: | |||
kas: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Was there a config value we added for kasUri?
provider_config_id: 4ab6b1c4-fa5c-4036-8921-53f8c267b728 # provider_config_1 | ||
private_key_ctx: eyAid3JhcHBlZEtleSI6ICJsY2JxNjgyR3NpaStqRWtRNjJzV0lYa1dXVkpqZ1dQdXZobUJ0OUtpWUZKL28zWENseVJkNGMwS0RGdHVvaGRCdzJqdlZHd2VGZnNwaTllV0dNSXpFbDZiY0VSYzUycTVIdmlINWtjVDlSY25KaFV2M2lONjM1UndIek52akdFVktLVU5CdjRwZkVOMzB3N29wSFBpZ3owS1ExVkJNSk5PM1lEOUZWQTdVb0h4MGVKY0Y3WlFKSkdYeHdwUVYwTXR3bHFtUnBxNFEyVTl2cFlyajY3ODdRSEdmOWhlZ0lYTkErcjByM1RDTHB3YzVZM0E5aEhreWp3N1FnWEU4dWVKSUx1TW04N0NlckpweVpPQ3NySDN2QWppWUFWdjcvZEVKcWpYMUFnYUI4NFQ3aHhERmVqOUpLaEl5OWVLWk5yTndNWW1Bc0hwYkEzamc1R0VIQjdFM2ZYRXFoaTFTTllhR1ZpZHRvSnVTLzNrVm5JTEtOWTZpZnRvNllMTEJBdWlQQVJjNTZVblVTS0hZQ1dtTko3QkM4Y0hhN2FIdDllUW1lVVRicVZmMGg3aDQ2M3FZQ2F6RDhYT0FMUTBuQ3lPQ3I5dUxkV1o1QThLbHFmMytqKzcyOGtaYUJFN2tKZ1I1UFh0dDFMTHlYcThmSEhPRXNOWXMzT3RSOGN3akV1ZGpvVVRJMTd1YkJOYjhYZU01emFaL1dmdWZDcWp2UGVjREt6cHJVbzdlanBrZjZKOEJ0RStZSFZRSjdNMWJWb1ZlQ0tFTWUvK3p5Y2Zpc3BzbmZsQ1ZtNkJNdFlMdmtVLzIzRWRiOWNNN1BRR3lFTEZOeDMyQXRwUXpMRUUrNWVaWWFhUU5Za3hEaWF0c3ZkMkQyNEVSTVhmWGp1YWg4MTBOSVpUZTE4cStGMitZMEtuTU9LZHpqV3AyUXdvNHVIb3JidndRRkwzOXZrVHJmZTIzelhVY2Q2N1pCTmpJUUNGc0prOW5sRk9ORjhrc25XVzQ5aHdxSjk1dXJtaG5zSGRSZlBrbVc2SHZ0UnVTclN3L2VmOGZ0MUZmMlZGMUNKUXArSnc2YnpKWmRQSzdsTmxmN1F3N2trREtqSGxnTTVnanZlZVJXZjE5Q3FqaTdHM1FhSS9Oa3FDdEplWllLZmZGU1RtbStIY3o0bXpMQkpzc3hNdGgvUkRaQzVTaVVJODJhZ0h0QkJ5VC9DK3A2NEE3cjZGeFNvdmRNTi9mTU5ZSUx3NGRQV3VxdDZwNmVnTUlyMFNVYXBpUHJpTjBiRjNaN2d5R1QxQXZyMHVnaU9qQUI3L3pybDJHaWFlajFUV01YS08zd2J4L0VzUVdpMDNWcmxWanBIdjl2Y2hlWjdGTzliREJUUkxKZHI0QkU4RWs0YkZCaytxRkZOQXZXcC9GZDFiNnFiKytEdU5Iajg1V2R3WE1PaW9nNUlSSzdjZUlNT0xQY214TnE3YXh5WnkrTm0yQ2VocjN5Qk9OQzFQRml4U2NMSGJZUEJlTU9EaGJHWXo5NEVaYkxHOWJpL1B5RkJiNERYSGlLemxrNEtTZ3BYZ1FLUHBSRWx6aUNiYVB3WlowZVljUEhoaktVNHQ3a2k3TlR2MlFYVU1nK3V2dVZWajJtcGpSMTJ5bmJiS2xJNDJoUEcxYW1FV0JlM1JjNmZ4cW5uQnVScnlMWjdEYW5wa252V0t5UXE3S1pHSHJGemlaMEE3Q1VSejFnT2R4d2xDQXEvRnAxZ2oxMGpNMFpJK3lod1RGcnhCUDJXdHF1S1dBREhGMHBGblNWdUpKUnlzUFR2aXNSYVM1N3d2aVZZQnRCcnRGYmZhTHBGcytwQ2ViYk81K0dRZ29wWlZaSDM5c0lnY0dIY3B4RU1zdDBCd3JuUGZIM0RRbGJqVmdrWlFmNkJiZUpDNWFBL2tEVTVSZFNiUTI1NjNCcGRMRUREQ3dvaVU5NW5LcE1tOE8zVTIxMEdRMHgveFdFYUMxdDJkOVM2RlVFbFRVSlJYWVZNZVB2Z3JaMnZGajl5YTZvNm5LVWt4RXAyaUlkS2d1ckR4MEVNSHZ2NU90TEZYTnVXWVdIU0o3czNET3JWNjZxUXRYaHF6VUlsRjRHWERVYUpmZ3NtUTk0MU03eUFqL3RibjBHUGFkMENsRXZWd25ucGpnNEpoZ2Y1dlpCaC9TcG5Na2hia1RIQis0ajhrT1dFTHdWc2ZDU3RTa0ZGdHAxY1VtRVI5RWhqSzhjSmJ3L2FKVTU5ZkZmZDJXR0N6VUxIZkEyMURLcld6SWwzODhray94cXdUN1E5aU92Y1NSN1pzdE10R1RRWG54Q1gvV3A4VG9qNjRIM2RsR2p6TGhGeDZ1Qk53WFQxMTRSeGw4ZWZLdW9VZzd0ZHcxcVdtOUplUC92TVF6VTlLd2Z5SExLNmdDQUlmWkpneVkrcnVyN0YrZVNPRUlEeWlkRnJLM1NWTFE3T1lHRmVXaFRNS01HdzdaV2VuTC9xWDdBUFErdkdoMmpQNTJVN2VsT0t4L1RsTkZ5UHJHL2FZUDN0MDRTdWVZUkd2RXAremZkVU0xbmYvN3YvRHhzc1VSS29zQUdHa1JwbzBLQ3NUU0I4UzhxdTlNKzA3YjBSREVXai9QdHVrZWdvRUR1KzZ4azN0WmRqclpWTTIxZURDaDhxME9HbS9KeDBITWVlUHFIY28zeEdTMUpYMW90QVp3UEhaaUkyaWNjWksrV21KTExaSXJYSzRsSG8vd1lpQitOeUlwZDJWd2dTdXZua3hhTlF5dmxtdWtSaTJCTzM1ZEdDNVFaY1V5d2lCZlRoSzdzRC9CMjJHNDZlUVNHeTdqeTlJSmJaMXhNKzVHcXVxOTdPOCtWOVIreEcydW1ZN0grWG90NlBaRjVPT0hERmI2cEVUSThsNDJDdDV2bElJMmRmWXFqZWR6WHAvb1drdXFub2FQejNnUU4wS2JGaDlsazZvVXVJMWlMaHBDMWxIR283em8xV3E0NDFlUW9nS3dhWFNDcGxQNDE0UW44dFE0elcvRTdjZ2hLbnpWMTg1K2lHdXBxTnNoWTBlS1VtSzB2Rkx3dkcrdnc9PSIsICJrZXlfaWQiOiAiY29uZmlnIiB9 | ||
public_key_ctx: eyAicGVtIjogIkxTMHRMUzFDUlVkSlRpQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENrMUpTVU12VkVORFFXVlhaMEYzU1VKQlowbFZSakE1UVdwSWFsbEpPRU5TZWtWR1NtcGpWRVJFWTJsa1pFZ3dkMFJSV1VwTGIxcEphSFpqVGtGUlJVd0tRbEZCZDBScVJVMU5RVzlIUVRGVlJVRjNkMFJoTWtaNlRVSTBXRVJVU1RCTlJGVjNUbXBGZVUxVVFYaE5iRzlZUkZSSk1VMUVWWGRPYWtWNVRWUkJlQXBOYkc5M1JHcEZUVTFCYjBkQk1WVkZRWGQzUkdFeVJucE5TVWxDU1dwQlRrSm5hM0ZvYTJsSE9YY3dRa0ZSUlVaQlFVOURRVkU0UVUxSlNVSkRaMHREQ2tGUlJVRnNWRUk1ZWtzM2R6RjFNRzFtT1dJNWJtZzRVM3AwSzB0NVpGZHZialV5VURWTlkyazRaMVlyZW1GUVdqbG1NMHBpY2xsSFZXWldXRzE2Um1FS2JWRXJUakJtVGpaUmFEaFZPV2x6YnpGUFozVkhXREIxZVRSd1YxazNlbTFYVFhGdFJqVnBTazlJTkVOQmRUVm5WMlZ1YzNJNVIyRlhNMWxtZUV0V1JncFdVbnBLY1V4MFUzcEJUM2x2UTBsaE5WRXJTVEpVZG1kTmVFWmpTRll3U0dONE9YVTVla2RZZERkS05VZGxWMXBUTTNJMk9VZzRNR1JHVWpkR2MwbFJDazFoVERaUlVIaG1VV05XT1ZKaWRXOXdlVUZ3T0U0M1RrdGlVM3A0T0VaVVpFSllVV0U0UW5WeFRYTnZObFp5SzBjclpDOW9lVnA2WWxwVmMxcEVVelFLWjNSdE5uSkNRbFVyYUU4ek1FTjZXbkJhWkhCRVRWTlBkamxqTkdOWlVYbHBkRWx3UmpCcmJWZFFjRTAyWWl0S1V6UnlOMmhHVVU1a1kxQldWWEJXZUFvdlZHb3dSVUZOYVdzcmNIcFpRVXh5YWxSTFpqbEhjbUprZDBsRVFWRkJRbTh4VFhkVlZFRmtRbWRPVmtoUk5FVkdaMUZWYTJSVE0wSnVXSE5uWlV0U0NuVk5MMGhDTlc5c00zbGFjVlJ2TUhkSWQxbEVWbEl3YWtKQ1ozZEdiMEZWYTJSVE0wSnVXSE5uWlV0U2RVMHZTRUkxYjJ3emVWcHhWRzh3ZDBSM1dVUUtWbEl3VkVGUlNDOUNRVlYzUVhkRlFpOTZRVTVDWjJ0eGFHdHBSemwzTUVKQlVYTkdRVUZQUTBGUlJVRlRaWG94UVZaaE5WaEhWWEJyTlVnNFRIcHlTUXA0VTBWelVuUkhVaXRTVjJOSmRHeE1aVlZMYzNOUFRUTnpZMDFtVUVaNlNuUXlUbGR3ZDBOd1NUUmlZMkZHUVZnemVGbExSMWx4Vm5aelZtcHhiVEZWQ25SS1ltaDZkekZoVVZCVVQyWnZORFpsT1hOR0sybHhaR0pwYkVwbFJVbFFabGxEYjB3MlZYUjBSbTk2VEM5TFoyazFlV0ZsU1hCU2NURmlhSEZ3VmpjS1RWUm1TbTFDYkhWSWNrWmhkV05GYUVGTVRESm9LMHRzUTFSNmFtSnNRbkJaTjFocFZGWkhjM0paYzBWMk1tRjNORWgyYjFwWlZrWlZWM0l4UTFKWFlncHBjREI0ZEZaMVNYRTVSRmhoYTBaSllXVlFXbFpuTUhSQ2N6VkJlakJ6VUdscE5VZFVWalV6VlhkbWNqWTRWamhCWVhGUlNFOXlWR1JRTDJaYWRrTjNDbVJYVFdkS1NubHRjMjFWVWlzMWNUSkNUbkp2WkhsVFdEZDRSelp4ZW5FME1tNUJWMVp3U2xOdmIwZzVaV2RTWVhadVowUTVVWFJyZVdVNUt6QnVSVzBLVkdjOVBRb3RMUzB0TFVWT1JDQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENnPT0iIH0= | ||
provider_config_id: 4ab6b1c4-fa5c-4036-8921-53f8c267b728 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should this be nil since it's mode local
Proposed Changes
Checklist
Testing Instructions